2013-06-17 28 views
7
public class DBUtilU { 
    private static Session scss; 
    private static SessionFactory sfactory; 
    static { 
     Configuration cfg = new Configuration(); 
     cfg.addAnnotatedClass(Userdetails.class); 
     cfg.addAnnotatedClass(Code.class); 
     cfg.addAnnotatedClass(Messages.class); 
     cfg.addAnnotatedClass(Comments.class); 
     cfg.configure(); 
     new SchemaExport(cfg); 
     sfactory = cfg.buildSessionFactory(); 
    } 
} 

public static List<Code> searchCodeTags(String tags) { 
    List<Code> codelist = new ArrayList<Code>(); 
    try { 
     scss = sfactory.getCurrentSession(); 
     scss.beginTransaction(); 
     String query = "from Code where Tags=" + tags; 
     Query queryResult = scss.createQuery(query); 
     for(Object c : queryResult.list()) 
      codelist.add((Code)c); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 
    return codelist; 
} 

package UsersProperty; 
@Entity 
public class Code { 
    @Id 
    @GeneratedValue 
    private int codeId; 
    private int Rating; 
    private String fileName; 
    private String OwnerName; 
    private String PrjName; 
    private String Tags; 
    @ManyToOne() 
    @JoinColumn(name="userid") 
    private Userdetails userdetails; 
    @OneToMany(targetEntity=Comments.class, mappedBy="targetCode") 
    private List<Comments> cm; 

    public int getRating() { 
     return Rating; 
    } 
    public void setRating(int rating) { 
     Rating = rating; 
    } 

    public List<Comments> getCm() { 
     return cm; 
    } 
    public void setCm(List<Comments> cm) { 
     this.cm = cm; 
    } 
    public String getFileName() { 
     return fileName; 
    } 
    public void setFileName(String fileName) { 
     this.fileName = fileName; 
    } 

    public String getOwnerName() { 
     return OwnerName; 
    } 
    public void setOwnerName(String ownerName) { 
     OwnerName = ownerName; 
    } 

    public String getPrjName() { 
     return PrjName; 
    } 
    public void setPrjName(String prjName) { 
     PrjName = prjName; 
    } 

    public String getTags() { 
     return Tags; 
    } 
    public void setTags(String tags) { 
     Tags = tags; 
    } 
    public Userdetails getUserdetails() { 
     return userdetails; 
    } 
    public void setUserdetails(Userdetails userdetails) { 
     this.userdetails = userdetails; 
    } 

    public Code(String fileName, String ownerName, String prjName,String tAgs) { 
     super(); 
     this.fileName = fileName; 
     OwnerName = ownerName; 
     PrjName = prjName; 
     Tags=tAgs; 
    } 
    public Code() { 
     super(); 
    } 

    public static List<Code> CodeSearch(String TAGS){ 
     return DBUtilU.searchCodeTags(TAGS); 
    } 
} 

Console:nie mógł wydobyć ResultSet

> Hibernate: select code0_.codeId as codeId1_0_, code0_.OwnerName as OwnerNam2_0_, code0_.PrjName as PrjName3_0_, code0_.Rating as Rating4_0_, code0_.Tags as Tags5_0_, code0_.fileName as fileName6_0_, code0_.userid as userid7_0_ from Code code0_ where code0_.Tags=Overloading 
Jun 17, 2013 8:38:05 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
WARN: SQL Error: 0, SQLState: 42703 
Jun 17, 2013 8:38:05 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
ERROR: ERROR: column "overloading" does not exist 
    Position: 252 
org.hibernate.exception.SQLGrammarException: could not extract ResultSet 
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123) 
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:61) 
    at org.hibernate.loader.Loader.getResultSet(Loader.java:2036) 
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1836) 
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1815) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:899) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341) 
    at org.hibernate.loader.Loader.doList(Loader.java:2522) 
    at org.hibernate.loader.Loader.doList(Loader.java:2508) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2338) 
    at org.hibernate.loader.Loader.list(Loader.java:2333) 
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:490) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:195) 
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1269) 
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101) 
    at DB.DBUtilU.searchCodeTags(DBUtilU.java:117) 
    at UsersProperty.Code.CodeSearch(Code.java:90) 
    at Test.Main.main(Main.java:34) 
Caused by: org.postgresql.util.PSQLException: ERROR: column "overloading" does not exist 
    Position: 252 
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157) 
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886) 
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:302) 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:56) 
    ... 17 more 

Problem:

Zdarza się, kiedy wykonać funkcję searchCodeTags z DBUtilU klasie. Co tu się dzieje?

Odpowiedz

11

zmienić zapytanie jak poniżej:

String query = "from Code where Tags='" + tags+"'"; 

W przeciwnym razie, jak poniżej:

String hql = "from Code where Tags=:tags"; 
Query query = session.createQuery(hql); 
query.setParameter("tags",tags); 

porównania w wypowiedzi gdzie klauzula jest z dosłownym a nie innej kolumnie. Musi więc być albo przytoczony jak w pierwszym przypadku, albo użyć zmiennej bind, tak jak w drugim przypadku.

4

Spójrz na komunikat o błędzie (przyznam, że stacktrace jest długi, ogólnie interesująca część jest blisko góry).

ERROR: ERROR: column "overloading" does not exist

from Code code0_ where code0_.Tags=Overloading

trzeba zacytować 'Overloading', bo to nie jest nazwa kolumny, ale wartość dosłowne. Co więcej, ustaw ją jako zmienną wiązania.

0

jeśli masz CamelCase, a JPA przejdzie na Camel_Case, przekonwertuj go małymi literami.

+0

Mam ten sam problem. Stworzyłem POJO StagingMovie i Table as stagingmovie kiedy uruchomiłem moją aplikację do uruchamiania wiosennego, aplikacja szuka tabeli staging_movie, która nie jest obecna. Jak tego uniknąć? – Krish