Tôi nghi ngờ điều này là đáng xấu hổ vì tôi đang làm sai một cách khủng khiếp, nhưng hãy chịu đựng với tôi.Các giao dịch được quản lý mùa xuân, EclipseLink JPA, mức cách ly tùy chỉnh
Tôi có một ứng dụng Mùa xuân với các giao dịch do Spring quản lý. Nó sử dụng EclipseLink JPA. Tôi có phương thức thực hiện findByNativeQuery()
, sau đó là merge()
. Tôi cần điều này xảy ra trong một mức cô lập giao dịch SERIAL thực. Tôi đã thử thêm @Transactional(isolation=Isolation.SERIALIZABLE)
này không làm việc vì org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect#beginTransaction
không hỗ trợ bất kỳ mức cô lập giao dịch nhưng mặc định. Vì vậy, sau đó tôi đã cố gắng nhận được để UnitOfWork ruột của ElcipseLink và bắt đầu/comitting giao dịch của riêng tôi, nhưng sau đó tôi nhận được một lỗi:
"java.lang.IllegalStateException : Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead
Trong đó tất nhiên có ý nghĩa ... nhưng tôi phải làm gì ??
Hãy xem [này] (http : //www.byteslounge.com/tutorials/spring-change-transaction-isolation-level-example). Tôi đã không thử nó bản thân mình, nhưng trông giống như một nơi tốt để bắt đầu. –
Tôi nghĩ rằng JPA không hỗ trợ các mức cô lập tùy chỉnh. Đây là một hạn chế của JPA, không phải mùa xuân. Nó có thể yêu cầu để thực hiện tùy chỉnh JpaDialect – Chakri