0

这是我在这个网站上的第一篇文章,我很确定我会解决我的问题。我在 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..!
4

2 回答 2

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();

}
于 2013-03-30T19:30:01.507 回答
1

您的代码甚至无法编译,createNamedQuery 返回的是 Query 而不是 Person。假设您调用 getSingleResult,但 createNamedQuery 仍采用名称而不是 SQL,因为您需要 createNativeQuery。

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

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

于 2013-03-25T14:15:51.093 回答