JPA - 无法在PersistenceException上标记回滚

时间:2013-03-24 19:36:30

标签: jpa

这是我在这个网站上的第一篇文章,我很确定我会解决我的问题。我在JPA方面不太好,所以陷入了一个问题。不可能分享完整的代码,但通过以下示例让您了解我想要实现的目标:

underOneMethod(){

Person personObj1 = entityManager.createNamedQuery("Select * from Person where smthing..");
personObj1.setFirstName("John");
personObj1 = entityManager.merge(personObj1);
entityManager.flush();

Person personObj2 = entityManager.createNamedQuery("Select * from Person where smthing..");
personObj2.setLastName("Cruz");
personObj2 = entityManager.merge(personObj1);
entityManager.flush();

} // This code throws me exception. I think it will work if I use entityManager.clear() method after first flush call but still it will be good, of someone can me some idea of what is happening in this case and how can it be resolved. Thanks in advance..!

2 个答案:

答案 0 :(得分:1)

您的代码甚至无法编译,createNamedQuery返回的查询不是Person。假设您调用了getSingleResult,但仍然createNamedQuery的名称不是SQL,因此您需要createNativeQuery。

此外,由于您刚刚选择了该对象,因此不需要合并,因此它已经被管理。

包含异常堆栈跟踪和实际代码会有所帮助。

答案 1 :(得分:1)

嗯,我得到了很久的答案,但没有时间回答这里。无论如何,它的好时机回答。正如我之前的评论中已经提到的那样我使用了entityManager.clear()方法并且它有效。希望它对其他人也有帮助.. !!

underOneMethod(){

Person personObj1 = entityManager.createNamedQuery("Select * from Person where smthing..");
personObj1.setFirstName("John");
personObj1 = entityManager.merge(personObj1);
entityManager.flush();

entityManager.clear();

Person personObj2 = entityManager.createNamedQuery("Select * from Person where smthing..");
personObj2.setLastName("Cruz");
personObj2 = entityManager.merge(personObj1);
entityManager.flush();

}