Tomcat :5.5
甲骨文:11G(11.1.0.7.4)
JDK: 1.6
hibernate :3.0.5
背景
我们正在使用 Hibernate 获取 View 上的行数。
View 的编写方式总是至少有一行。
在数据库中,有足够的行供 View 返回 8 行。
问题
偶尔,我们被算作零
如果我们再试一次(即用户刷新屏幕),将返回正确的计数 8。
调查
我们已经尝试了很多事情来排除以下情况
1) Oracle 服务器返回错误结果
2) 检查 View 以确保它是好的,即返回正确的结果
现在怀疑转向了Hibernate
代码片段
你能在下面的代码中发现任何可疑之处吗?
public static int getRowCount( Criteria criteria )
{
int totalRows = 0;
criteria.setProjection( Projections.rowCount() );
Integer count = ( Integer ) criteria.uniqueResult();
if ( count != null )
totalRows = count.intValue();
criteria.setProjection( null );
criteria.setResultTransformer( Criteria.ROOT_ENTITY );
return totalRows;
}
我们还验证了计数为零且不为空
听起来可能很奇怪,但已发布 Oracle 缺陷,它会返回不正确的结果,而且当我们应用 Oracle 修补程序时,这个错误就开始发生了。
问题
有没有人认为 Oracle 可能会返回不正确的结果?
任何有关如何解决此问题的建议也将不胜感激...
一些关键事实的总结
- 大约在我们将 Oracle11G 从 11.1.0.6.1 升级到 11.1.0.7.4 并进行一些热修复的同时开始发生。
- 这是那个时间段内生态系统发生的唯一变化 - Oracle 的变化
- 这发生不一致。现在您看到了问题 - 现在您没有看到。
- 不常见。但严重到足以引起警报。
最佳答案
我要做的第一件事是打开 Hibernate 的查询日志记录。这将准确地告诉您发送给 Oracle 的 SQL 是什么。然后您可以运行该确切的 SQL 并查看您得到的结果。
您可以使用以下方法之一打开查询日志记录:
关于java - 从 Hibernate\Oracle 得到不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6428544/