2016-05-23 25 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); 

私は次の例外を取得:私は

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

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

を行うと

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

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

あなたは何を投稿すると、他のJPA実装には全く役に立たないので、あなたは一見、HIBERNATEを使用しているので、この「答え」がないことを言及するつもりだしJPAに対する回答ですが、HIBERNATEの明示的な回答のみ –

関連する問題