【发布时间】:2014-06-18 19:52:25
【问题描述】:
我怀疑这件事很尴尬,我做错了很糟糕,但请多多包涵。
我有一个带有 Spring 管理事务的 Spring 应用程序。
它使用 EclipseLink JPA。
我有一个方法,它执行findByNativeQuery(),后跟merge()。我需要在真正的 SERIAL 事务隔离级别中发生这种情况。
我尝试添加
@Transactional(isolation=Isolation.SERIALIZABLE)
这不起作用,因为org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect#beginTransaction
不支持任何事务隔离级别,但默认。
因此,我尝试进入 ElcipseLink 的 UnitOfWork 内部并开始/提交我自己的事务,但随后出现错误:
"java.lang.IllegalStateException : Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead
这当然是有道理的......但是我该怎么办??
【问题讨论】:
-
看看this。我自己没有尝试过,但看起来是个不错的起点。
-
我认为 JPA 不支持自定义隔离级别。这是 JPA 的限制,而不是 Spring。它可能需要实现自定义 JpaDialect
标签: java spring jpa transactions eclipselink