我使用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?
答案 0 :(得分:0)
我的表没有主键,所以Hibernate似乎在SQL和HQL查询之间存在混淆。
当我复制我的数据库时,Hibernate每个表生成2个类。
public class Classe
,代表表CLASSE public class ClasseId
,代表所有colunms上的嵌入式ID。对我来说很奇怪,但我认为代表桌子的每个clas都必须有一个id。