Java Spring中使用JPA在Oracle上可重复读取
Java Spring中使用JPA在Oracle上可重复读取,java,jpa,oracle11g,spring-annotations,Java,Jpa,Oracle11g,Spring Annotations,当我尝试使用spring注释将隔离级别设置为Oracle DB上的可重复读取时,我得到: java.sql.SQLException:READ_COMMITTED和SERIALIZABLE是唯一有效的事务级别。-(ORA-17030) 这是解决这个问题的一种方法 @Transactional(isolation = Isolation.REPEATABLE_READ) @Override public List<ToMq> getAndChange1000NotForwarded()
当我尝试使用spring注释将隔离级别设置为Oracle DB上的可重复读取时,我得到:
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;
}
@Transactional(隔离=隔离。可重复读取)
@凌驾
公共列表getAndChange1000NotForwarded(){
String queryText=“从ToMq c中选择c,其中c.forwarded=0和”;
TypedQuery query=em.createQuery(queryText,ToMq.class);
query.setMaxResults(1000);
List resultList=query.getResultList();
当前日期=新日期();
for(ToMq-ToMq:resultList){
toMq.setForwarded(Boolean.TRUE);
toMq.setForwardTimestamp(当前);
}
保存(结果列表);
返回结果列表;
}
ORA-17030错误消息是由Oracle JDBC驱动程序生成的JDBC错误消息。根据文档,支持以下数据库事务隔离级别:
- 读取已提交(默认)
- 可序列化
- 只读
因此,无法对Oracle数据库强制执行可重复读取(ANSI/ISO)隔离级别。ORA-17030错误消息是由Oracle JDBC驱动程序生成的JDBC错误消息。根据文档,支持以下数据库事务隔离级别:
- 读取已提交(默认)
- 可序列化
- 只读
因此,不可能对Oracle数据库强制执行可重复读取(ANSI/ISO)隔离级别。您听到了数据库。如果它不支持
REPEATABLE\u READ
,你就不能拥有它。我想它可能是JPA和Spring或者驱动程序不支持那种隔离级别。ORA-17030
是oracle错误,而不是JPA、Spring或者驱动程序错误。你听到了数据库。如果它不支持REPEATABLE\u READ
,你就不能拥有它。我想它可能是JPA和Spring或者驱动程序不支持隔离级别。ORA-17030
是oracle错误,而不是JPA、Spring或者驱动程序错误。您好。在这种情况下,有没有办法告诉Spring使用默认事务隔离?谢谢。您是说Oracle DB的“Read Committed”作为默认事务隔离吗?如果是的话,那就是你要走的路。你好。在这种情况下,有没有办法告诉Spring使用默认事务隔离?谢谢。您是说Oracle DB的“Read Committed”作为默认事务隔离吗?如果是的话,那就是你要走的路。