我正在尝试使用相同的事务实体进行2次不同的DB调用。我知道我可以在begin()
和commit()
之间进行审讯,但我只是出于教育目的而尝试这种方式。
EntityTransaction transaction = em.getTransaction();
EventService eventService = new EventService();
transaction.begin();
Event currentEvent = eventService.read(eventId);
transaction.commit();
if (currentEvent != null){
CommentService commentService = new CommentService();
transaction.begin();
commentList = commentService.getList(1, id, 50);
transaction.commit();
}
这段代码抛出:
异常说明:交易当前有效
这是正常的,知道我正在尝试begin()
已经打开的交易。
在我必须使用数据库时,排除第二个transaction.begin()
并使用commit()
是否正确?
LE 我正在使用EclipseLink和RESOURCE_LOCAL
答案 0 :(得分:2)
这是因为transacton-type
设置为RESOURCE_LOCAL
。
在这种情况下,您必须创建一些应该处理SingleTon
和EntityManager
的{{1}}个类。
答案 1 :(得分:0)
奇。这应该工作。您使用的JPA提供商是什么?也许启用日志记录以查看正在发生的事情。
答案 2 :(得分:-1)
private static EntityManager picassoEm = null;
public static synchronized boolean insertToDB(EntityObject eobj) {
try {
if (picassoEm == null) {
picassoEm = JPAUnit.getEntityManagerFactoryPicasso().createEntityManager();
}
EntityTransaction eT = picassoEm.getTransaction();
eT.begin();
picassoEm.persist(eobj);
eT.commit();
return true;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
JPAUnit是你自己的工厂