2013-06-17 6 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); 
    } 
} 

콘솔을 추출 할 수 있습니다 :는 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 

문제 : DBUtilU 클래스에서 searchCodeTags 기능을 실행할 때

그것은 발생합니다. 여기서 무슨 일이 일어나고있는거야?

답변

11
은 아래에 조회를 변경

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

의 비교를 절은 문자 그대로가 아닌 다른 컬럼입니다. 따라서 첫 번째 경우와 같이 인용해야하거나 두 번째 경우와 같이 바인드 변수를 사용해야합니다.

4

오류 메시지를보십시오 (나는 stacktrace가 길다는 것을 인정합니다, 일반적으로 흥미로운 부분은 맨 위에 있습니다).

ERROR: ERROR: column "overloading" does not exist

from Code code0_ where code0_.Tags=Overloading

당신은 열 이름, 그러나 리터럴 값이 아니기 때문에, 'Overloading'을 인용 할 필요가있다. 더 좋은 점은 바인드 변수로 설정하는 것입니다. 아래 그렇지 않으면

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

:

0

camelCase가있는 경우 JPA가 Camel_Case로 변환되고 소문자로 변환하면 정상적으로 작동합니다.

+0

동일한 문제가 있습니다. 스프링 부트 응용 프로그램을 실행할 때 stagingmovie POJO StagingMovie 및 Table을 만들었습니다. 응용 프로그램이 존재하지 않는 staging_movie 테이블을 찾고 있습니다. 이것을 피하는 방법? – Krish