2016-05-23 5 views
0

Ich versuche, eine Transaktionsisolationsstufe für die Verbindung mit einem bestimmten Entity Manager (TRANSACTION_SERIALIZABLE etc.) zu setzen.Java JPA, Einstellung Transaktionsisolationsstufe mit einem Entity Manager

Ich habe das Internet nach einer Lösung durchforstet und einige gefunden. Jedoch scheint keiner von ihnen zu funktionieren.

Wenn ich versuche, die folgendes zu tun:

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

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

Ich erhalte die folgende Ausnahme:

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

Wenn ich

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

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

Der Wert connectionnull ist gespeichert.

lief ich die folgend, um mehr zu erfahren:

Object obj = em.getDelegate(); 

Der in obj gespeicherten Klassentyp org.eclipse.persistence.internal.jpa.EntityManagerImpl

Edit ist: (oops, ich denke, das von der Ausnahme gesagt hätte)

Edit2:

ich es geschafft haben, die Sitzung (glaube ich) durch den Aufruf zu erhalten:

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

Jedoch sind weder die connection() noch die DoWork() Methoden darin vorhanden.

Haben Sie eine Idee, wie Sie dies verfolgen und die Transaktionsisolationsstufe festlegen können?

Antwort

0

Ich habe die Lösung gefunden:

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

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

Sie gehen zu erwähnen, dass Sie scheinbar verwenden HIBERNATE, weil Sie jede andere JPA-Implementierung völlig nutzlos, was schreiben würde, so dass diese „Antwort“ ist nicht eine Antwort für JPA, aber explizit nur für HIBERNATE –