java - 从 Hibernate\Oracle 得到不正确的结果

标签 java oracle hibernate oracle11g

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 并查看您得到的结果。

您可以使用以下方法之一打开查询日志记录:

  • 调整 org.hibernate.SQL 日志类别 ( more info )
  • 设置 Hibernate 属性 hibernate.show_sql ( more info )

关于java - 从 Hibernate\Oracle 得到不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6428544/

相关文章:

oracle - 读取Oracle数据库时,在Proc SQL的where子句中使用数据集观察

sql - 使用格式从 sql 开发人员复制查询

java - TypeError : jQuery. 大气未定义 Packed.js:2261

java - hibernate 异常。查询语法异常 : unexpected token: HAVING

java - 用于安排任务的 Cron 表达式

java - Maven.surefire.util.SurefireReflectionException 在测试 Junit 测试时

java - 使用 Java 和 Oracle 数据库时出现奇怪的唯一约束错误

java - tomcat部署时报错

java - 将数组值从一个类复制到另一个类

java - 尝试访问 dao bean 时 Autowiring 依赖项的注入(inject)失败