Jpa eclipselink在同一事务中获得另一个jdbc连接
使用EclipseLink,我的伪代码如下所示: entityManager.getTransaction().begin(); //0 create orders //1 customerEntity.getOrders().add(orderEntity); //2 entityManager.getTransaction().commit(); //3 问题是在2,EclipseLink从1获得不同的连接,在一个事务和线程中结束两个连接,这导致我的应用程序死锁Jpa eclipselink在同一事务中获得另一个jdbc连接,jpa,eclipselink,Jpa,Eclipselink,使用EclipseLink,我的伪代码如下所示: entityManager.getTransaction().begin(); //0 create orders //1 customerEntity.getOrders().add(orderEntity); //2 entityManager.getTransaction().commit(); //3 问题是在2,Eclipse
我在谷歌上搜索到eclipselink可能会使用不同的池进行读写。这仍然是真的吗?为什么eclipselink尝试获取另一个连接,如何避免我遇到的死锁?如何获取自定义权限,以及如何使用读取连接导致死锁?我的自定义权限是从该entityManager获取的,在上述代码中找不到其他与entityManager相关的。死锁是因为在调用create orders时,conn1将插入DB,但直到3才提交。在2,另一个连接将从DB读取,可能是一个表扫描,这将阻止,因为insert尚未提交。我感到惊讶,因为如果EclipseLink检测到它在事务中,并且已经进行了更改,我的印象是reads将使用写连接,以便它可以看到事务中所做的更改。您是如何创建订单的?您是如何调用em.flush的?使用什么版本?以及您没有选择其他数据库设置以使读取不会被事务阻止的任何原因,因为这样做似乎真的会妨碍性能并增加在遍历事务内的任何关系时发生死锁的可能性。