在 Spring 中使用 JPA 在 Oracle 上进行 REPEATABLE_READ

Son*_*Son 1 java jpa oracle11g spring-annotations


当我尝试在 Oracle DB 上使用 spring 注释为 REPEATABLE_READ 设置隔离级别时,我得到:
java.sql.SQLException: READ_COMMITTED 和 SERIALIZABLE 是唯一有效的事务级别。- (ORA-17030)

这是处理这种情况的方法吗?

@Transactional(isolation = Isolation.REPEATABLE_READ)
@Override
public List<ToMq> getAndChange1000NotForwarded() {
    String queryText = "SELECT c FROM ToMq c WHERE c.forwarded = 0 AND";
    TypedQuery<ToMq> query = em.createQuery(queryText, ToMq.class);
    query.setMaxResults(1000);
    List<ToMq> resultList = query.getResultList();

    Date current = new Date();
    for (ToMq toMq : resultList) {
        toMq.setForwarded(Boolean.TRUE);
        toMq.setForwardTimestamp(current);
    }
    save(resultList);

    return resultList;
}
Run Code Online (Sandbox Code Playgroud)

wyp*_*prz 6

ORA-17030 错误消息是 Oracle JDBC 驱动程序产生的 JDBC 错误消息。根据Oracle 11g文档,支持以下数据库事务隔离级别:

  • 读提交(默认)
  • 可序列化
  • 只读

因此,不可能对Oracle 数据库强制执行可重复读取(ANSI/ISO) 隔离级别。