2016-05-23 17 views
0

我試圖爲與給定實體管理器(TRANSACTION_SERIALIZABLE等)關聯的連接設置事務隔離級別。Java JPA,使用實體管理器設置事務隔離級別

我已經搜索了一個解決方案,並找到了一些解決方案。但是,他們似乎都沒有工作。

當我試圖做到以下幾點:

EntityManagerFactory emfactory = Persistence.createEntityManagerFactory("BankingPU"); 
public EntityManager em = emfactory.createEntityManager(); 

java.sql.Connection connection = (java.sql.Connection) em.getDelegate();    
connection.setTransactionIsolation(TRANSACTION_SERIALIZABLE); 

我得到以下異常:

Exception in thread "main" java.lang.ClassCastException: 
org.eclipse.persistence.internal.jpa.EntityManagerImpl cannot be cast to java.sql.Connection 

當我做

EntityManagerFactory emfactory = Persistence.createEntityManagerFactory("BankingPU"); 
public EntityManager em = emfactory.createEntityManager(); 

java.sql.Connection connection = em.unwrap(java.sql.Connection.class); 

存儲到connection值爲null

我跑爲了下面找到更多:

Object obj = em.getDelegate(); 

存儲在obj類的類型org.eclipse.persistence.internal.jpa.EntityManagerImpl

編輯:(哎呀,你猜我可以告訴,從除外)

EDIT2:

我已成功地獲得了會議(我認爲)致電:

Session session = ((EntityManagerImpl) em).getSession(); 

但是,它們都不存在connection()DoWork()方法。

任何想法如何跟進並設置事務隔離級別?

回答

0

我已經找到了解決辦法:

emfactory = Persistence.createEntityManagerFactory("BankingPU"); 
    em = emfactory.createEntityManager(); 

    Session session = ((EntityManagerImpl) em).getSession(); 
    DatabaseLogin databaseLogin = (DatabaseLogin) session.getDatasourceLogin(); 
    databaseLogin.setTransactionIsolation(DatabaseLogin.TRANSACTION_SERIALIZABLE); 
+1

你要提,你是看似使用Hibernate,因爲你發佈將是完全無用的任何其他JPA實現,所以這個「答案」不JPA的答案,但明確只針對HIBERNATE –

相關問題