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

标签 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 的列表方法,我得到了一个包含 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。在升级之前一切正常。升级后出现此错误。

最佳答案

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

关于java - 尽管执行的 SQL 返回值,但 Hibernate 返回空值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24657919/

相关文章:

java - 如何检查字符串是否与 Groovy 中的模式匹配

java - 如何在 pmd 的一条规则中使用两个 AST 节点?

sql - 如何选择所有用户表并在 sql plus 中列出其大小?

c# - 有时间限制的旅行推销员

java - 用 Java 实现维基百科就地快速排序伪代码

mysql - 在 MySQL 中查找值位于哪两个数字之间

sql - PostgreSQL 在插入后强制 X 数量的外键行

sql - PostgreSQL:有条件地合并两行的值

java - IDEA Intellij 如何调试从 Java 类调用的 PL/SQL 代码

sql - Oracle降序有异常(exception)