无法提取ResultSet

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 searchCodeTags(String tags) { List codelist = new ArrayList(); 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 cm; public int getRating() { return Rating; } public void setRating(int rating) { Rating = rating; } public List getCm() { return cm; } public void setCm(List 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 CodeSearch(String TAGS){ return DBUtilU.searchCodeTags(TAGS); } } 

安慰:

 > 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函数时会发生这种情况。 这里发生了什么?

更改您的查询如下:

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

否则如下:

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

where子句中的比较是文字而不是另一列。 因此必须在第一种情况下引用它,或者在第二种情况下使用绑定变量。

看看你的错误信息(我承认堆栈跟踪很长,通常有趣的部分是靠近顶部)。

错误:错误:列“重载”不存在

来自Code code0_,其中code0_.Tags =重载

您需要引用'Overloading' ,因为它不是列名,而是文字值。 更好的是,将其设置为绑定变量。

如果你有camelCase然后JPA将转换为Camel_Case,将其转换为小写将工作正常。