gpt4 book ai didi

mysql - JPA EntityExistsException 合并时重复条目?

转载 作者:可可西里 更新时间:2023-11-01 07:45:29 28 4
gpt4 key购买 nike

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

谢谢

最佳答案

如果实体未设置则进行持久化,否则进行合并...

这对我来说对 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);
}
}

关于mysql - JPA EntityExistsException 合并时重复条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9452864/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com