在J2SE应用程序中使用JPA(OpenJPA)我正在尝试使用条目列表的内容更新表:添加新条目或用列表中的内容替换现有条目(如果它们存在)。
1)这样做的最佳方法是什么?
为此,我想在同一个交易中执行几百个合并...(列表中的某些条目可能与同一个Id一致)
使用HSQLDB似乎工作正常,但是当使用MySQL作为数据库时,我遇到了这个异常: org.apache.openjpa.persistence.EntityExistsException:重复条目
2)任何想法为什么?
代码很简单,如下所示:
EntityManager em = emfactory.createEntityManager();
em.getTransaction().begin();
// update messages
for (Message msg : messages) {
Entry e=new Entry(msg.getId(), msg.getText(),msg.getDate());
em.merge(e);
}
em.getTransaction().commit();
em.close();
感谢
答案 0 :(得分:0)
如果实体未设置,则执行持久性,否则进行合并...
这对我来说对H2 / HSQL / MySQL有用,em.contains()中的神奇之处在于检查实体是否附加在当前事务中。
在以下示例中,e.id的生成策略为AUTO
if (e.getId() == null || e.getId() == 0) {
em.persist(e);
if (e.getId() == null || e.getId() == 0) {
return null; //Or whatever you want to show that the persist failed
}
} else {
if (!em.contains(e)) {
return em.merge(e);
}
}