use*_*186 5 java jpa transactions
我正在尝试为与给定实体管理器(TRANSACTION_SERIALIZABLE等)关联的连接设置事务隔离级别。
我在互联网上搜索了解决方案并找到了一些。然而,它们似乎都不起作用。
当我尝试执行以下操作时:
EntityManagerFactory emfactory = Persistence.createEntityManagerFactory("BankingPU");
public EntityManager em = emfactory.createEntityManager();
java.sql.Connection connection = (java.sql.Connection) em.getDelegate();
connection.setTransactionIsolation(TRANSACTION_SERIALIZABLE);
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:
Exception in thread "main" java.lang.ClassCastException:
org.eclipse.persistence.internal.jpa.EntityManagerImpl cannot be cast to java.sql.Connection
Run Code Online (Sandbox Code Playgroud)
当我做
EntityManagerFactory emfactory = Persistence.createEntityManagerFactory("BankingPU");
public EntityManager em = emfactory.createEntityManager();
java.sql.Connection connection = em.unwrap(java.sql.Connection.class);
Run Code Online (Sandbox Code Playgroud)
connection存储的值为null。
为了了解更多信息,我运行了以下命令:
Object obj = em.getDelegate();
Run Code Online (Sandbox Code Playgroud)
存储的类类型obj是org.eclipse.persistence.internal.jpa.EntityManagerImpl
编辑:(哎呀,我想我可以从例外中看出这一点)
编辑2:
我已经通过调用以下命令成功获得了会话(我认为):
Session session = ((EntityManagerImpl) em).getSession();
Run Code Online (Sandbox Code Playgroud)
然而,其中既没有connection(),也DoWork()没有方法。
知道如何跟进并设置事务隔离级别吗?
我已经找到了解决方案:
emfactory = Persistence.createEntityManagerFactory("BankingPU");
em = emfactory.createEntityManager();
Session session = ((EntityManagerImpl) em).getSession();
DatabaseLogin databaseLogin = (DatabaseLogin) session.getDatasourceLogin();
databaseLogin.setTransactionIsolation(DatabaseLogin.TRANSACTION_SERIALIZABLE);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8042 次 |
| 最近记录: |