尽管执行的SQL返回值,但Hibernate返回空值列表

时间:2014-07-09 15:34:53

标签: java sql oracle hibernate

我正在使用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的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();

The result I'm getting after executing query.list();

有谁知道这里可能出现什么问题?

更新1

我最近从hibernate 3.2升级到4.3.5。升级之前一切正常。升级后,我收到此错误。

3 个答案:

答案 0 :(得分:9)

我已将休眠日志级别设置为TRACE并发现问题。它实际上是映射/逻辑/数据库错误。主键由两列组成(根据实体类),其中一列可以为空。但是,主键永远不能为空。因此,hibernate总是返回null。

答案 1 :(得分:1)

如果你还没有设置自定义(和错误)ResultTransformer,我的第二个最好的猜测是你的调试器对你说谎。你的代码实际上是否收到了null列表?

还要确保使用您显示的代码进行测试。很多时候,人们会简化事物,而魔鬼就是细节。

答案 2 :(得分:0)

这个错误发生在我身上。 MySQL查询浏览器工作,但在7列的休眠中,只有一列总是带有所有空字段。我检查了所有ID,但它们不是空的。错误在于构建SQL Native。我不得不改变写作的方式。艾工作。

{{1}}