【发布时间】:2014-07-09 15:34:53
【问题描述】:
我正在使用休眠作为 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 的 list 方法,我得到了一个包含 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
我最近从休眠 3.2 升级到 4.3.5。在升级之前一切正常。升级后出现此错误。
【问题讨论】:
-
能否请您发布实体 Foo 类。
-
您是否可能正在查询视图?必须有一个唯一的索引列,hibernate 可以使用它来映射回 Foo 实体的 id 属性。
-
@Zeus 我认为这没有帮助,因为我们不使用标准的休眠实体。它是自制的(几年前),在这里解释起来相当复杂。然而,这不应该是问题。原因在更新的问题中。谢谢
-
@skarist 是的,它可能是一个视图。感谢您的提示,我会检查一下。
-
@skarist 不,我正在从表中选择...