oracle - hibernate 重复查询

标签 oracle hibernate

我有一个 Web 应用程序(作为 ORM,我使用 Hibernate)来填充来自 Oracle 11 DB 的数据。 在短时间内,某些 Oracle 包会变得无效,然后又恢复有效(这是遗留数据加载,在此过程中用户可以使用其他 UI)。

当数据加载完成并且用户对这些包执行任何查询时,我遇到错误:

ORA-04068: existing state of packages has been discarded ORA-04061: existing state of package "sche.pck" has been invalidated ORA-04065: not executed, altered or dropped package "sche.pck" ORA-06508: PL/SQL: could not find program unit being called: "sche.pck"

如果用户按 F5(在错误消息屏幕上),则查询将成功执行。发生此类错误时是否有办法重复用户查询?

最佳答案

是 - 尝试/捕获异常,检查异常消息,查找 ORA-04068,如果找到,则重新运行查询。

理想情况下,您应该进行多次重试。像这样的东西:

for (int i = 0; i < 3; i++) {
    try {
          executeQuery();
          break; //if successful;
    } catch (..) {
        if (!ex.getMessage().contains("ORA-06508")){
             throw ex;
        }
    }
}

看起来有点老套,我建议尝试解决原来的问题。

更新:

似乎很多地方都必须这样做,所以上面的内容会很乏味。如果您确实无法解决底层的 oracle 问题,您可以尝试将 DataSource、Connection 和 Statement 对象包装到您自己的实现中,这些实现简单地委托(delegate)给底层对象,但在 executeQuery() 的情况下,执行重试。

关于oracle - hibernate 重复查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8062315/

相关文章:

Spring Boot 和 Hibernate 延迟初始化的奇怪行为

hibernate - 将 c3p0 与 Tomcat 8 数据源一起使用

hibernate - 交易所需异常 : no transaction is in progress while using JPAItemWriter

hibernate - 单向一对多

java - 如何在 Hibernate 应用程序中处理数据库空值?

mysql - Entity Framework 是否与 SQL Server 绑定(bind)?

java - 了解 Oracle Bug 数据库

oracle - 如何查看Oracle表列字符集?

sql - Oracle 存储过程返回表的集合

oracle - 从开始日期获取结束日期