为什么本机SQL不起作用?

时间:2014-05-27 08:46:46

标签: java hibernate

我使用hibernate v4.2.7.Final

表结构是:

  CREATE TABLE "OWNER"."TABLE" 
   (    
    "COL1" VARCHAR2(20 BYTE), 
    "COL2" VARCHAR2(20 BYTE), 
    "COL3" VARCHAR2(20 BYTE), 
    "COL4" VARCHAR2(20 BYTE), 
    "COL5" VARCHAR2(20 BYTE)
   ) ;

方法代码来源:

  @SuppressWarnings("rawtypes")
  public List<?> getAllPropertyValues(String property) {
    logger.debug("finding all {} from TABLE", property);
    try {

// Set the session ...

      String query = String.format(
          "SELECT DISTINCT t.%s, t.col2 FROM TABLE t ORDER BY t.col2",
          property.toUpperCase());
      logger.debug("query : '{}'", query);

      SQLQuery results = session.createSQLQuery(query);
      List list = null;
      if (null != results) {
        list = results.list();
      }
      session.getTransaction().commit();
      return list;
    } catch (RuntimeException re) {
      logger.error("find all failed", re);
      throw re;
    }
  }

为什么results为空?但SQLDEVELOPER中的SQL查询返回50个结果......

这个

  @SuppressWarnings("rawtypes")
  public List<?> getAllPropertyValues(String property) {
    logger.debug("finding all {} from TABLE", property);
    try {

// Set the session ...

      String query = String.format("SELECT DISTINCT t.id.%s, t.id.col2 FROM Table t ORDER BY t.id.col2", property.toLowerCase());
      logger.debug("query : '{}'", query);

      Query results = session.createQuery(query); // query is NOT NATIVE SQL here, THIS IS HQL
      List list = null;
      if (null != results) {
        list = results.list();
      }
      session.getTransaction().commit();
      return list;
    } catch (RuntimeException re) {
      logger.error("find all failed", re);
      throw re;
    }
  }

解决问题。但这不是原生SQL 。我很想知道为什么原生SQL在这里不起作用?

有人可以解释原因吗?我怎样才能在这里使用本机SQL?

1 个答案:

答案 0 :(得分:0)

我的表没有主键,所以Hibernate似乎在SQL和HQL查询之间存在混淆。

当我复制我的数据库时,Hibernate每个表生成2个类。

  1. public class Classe,代表表CLASSE
  2. public class ClasseId,代表所有colunms上的嵌入式ID。
  3. 对我来说很奇怪,但我认为代表桌子的每个clas都必须有一个id。