Java 为什么本机SQL不工作?

Java 为什么本机SQL不工作?,java,hibernate,Java,Hibernate,我使用HibernateV4.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) ) ; 方法代码源: @Suppres

我使用HibernateV4.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;
    }
  }
解决问题。但是这不是本机SQL。我很想知道为什么原生SQL在这里不起作用


有人能解释一下原因吗?在这里如何使用本机SQL?

我的表没有主键,所以Hibernate似乎混淆了SQL和HQL查询

当我重新设计数据库时,Hibernate为每个表生成2个类

  • 公共类Classe
    ,表示表Classe
  • 公共类ClasseId
    ,表示所有列上嵌入的id

  • 这对我来说很奇怪,但我认为代表一个表的每个类都必须有一个id。

    我必须使用not SQLTry-从表s ORDER BY s.col2中选择不同的s.col1、s.col2您能提供更多代码吗?你确定你和db有联系吗?@wawek连接很好!我想确保你们知道,在这一行中,你们只创建了一个查询,为了得到结果,你们必须执行它。你明白了吗?
      @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;
        }
      }