繁体   English   中英

在春季使用JPA在Oracle上进行REPEATABLE_READ

[英]REPEATABLE_READ on Oracle using JPA in Spring


当我尝试使用弹簧注释将隔离级别设置为Oracle DB上的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;
}

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM