【问题标题】:could not extract ResultSet无法提取结果集
【发布时间】:2013-06-13 16:22:57
【问题描述】:
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);
    }
}

控制台:

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

【问题讨论】:

    标签: java hibernate postgresql resultset


    【解决方案1】:

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

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

    来自代码 code0_ where code0_.Tags=Overloading

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

    【讨论】:

      【解决方案2】:

      如下更改您的查询:

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

      否则如下:

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

      where 子句中的比较是与文字而不是另一列。所以它必须要么像第一种情况那样被引用,要么像第二种情况那样使用绑定变量。

      【讨论】:

        【解决方案3】:

        如果你有 camelCase,那么 JPA 将转换为 Camel_Case,将其转换为小写就可以了。

        【讨论】:

        • 我也有同样的问题。当我运行我的 Spring Boot 应用程序时,我创建了一个 POJO StagingMovie 和 Table 作为 stagingmovie,应用程序正在寻找不存在的 staging_movie 表。如何避免这种情况?
        猜你喜欢
        • 2020-11-04
        • 1970-01-01
        • 1970-01-01
        • 2015-02-18
        • 2019-08-10
        • 1970-01-01
        • 1970-01-01
        • 2014-07-16
        相关资源
        最近更新 更多