我正在使用 hibernate 作为 ORMapper。我想执行一个实际上相当简单的 hql 查询:
SELECT a
FROM Foo a
WHERE a.status = :A0status
ORDER BY a.bookingTypeCode ASC,
a.priority ASC
这个 hql 查询然后被转换成一个 sql 查询,看起来像这样:
select a.*
from Foo a
where a.status='A'
order by a.bookingtypecode ASC,
a.priority ASC
当我使用 Oracle SQL Developer 在 oracle 数据库上执行 sql 时,我返回了 17 行。但是,当我执行 hql 查询时(使用 Query
的列表方法,我得到了一个包含 17 个元素的列表,这些元素都是 null
。虽然元素的数量是正确的,实际上没有一个元素被加载。
这是我创建和执行查询的方式:
// the hql query is stored in the hqlQuery variable;
// the parameter are stored in a Map<String, Object> called params
Query hQuery = hibSession.createQuery(hqlQuery);
for (Entry<String, Object> param : params.entrySet()) {
String key = param.getKey();
Object value = param.getValue();
hQuery.setParameter(key, value);
}
List<?> result = hQuery.list();
有谁知道这里可能是什么问题?
更新 1
我最近从 hibernate 3.2 升级到了 4.3.5。在升级之前一切正常。升级后出现此错误。
最佳答案
我把hibernate的Log级别设置为TRACE,发现了问题。这实际上是一个映射/逻辑/数据库错误。主键由两列组成(根据实体类),其中一列可以为空。但是,主键永远不能为空。因此 hibernate 总是返回 null。
关于java - 尽管执行的 SQL 返回值,但 Hibernate 返回空值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24657919/