JPA和独特的领域

我的应用程序中有两个持久性对象:附加到事物的东西和标签。 该应用程序可以生成带有标签的东西的集合。 标记对象具有唯一的名称(使用相同的标记标记两次没有意义)。

当插入Thing(附加了标记对象)时,db中可能已经存在一些具有相同名称的标记对象。 现在这里是我不记得有关JPA的部分,有没有办法告诉JPA如果它违反了唯一约束,它不应该尝试将相应的对象添加到db? 或者有没有办法有效地执行此操作而无需首先获取所有对象,然后将该集合合并到内存中然后将所有内容写回来?

我也想知道是否可以立即保留整个集合,或者在使用JPA时是否必须为每个对象调用persist?

我不知道采用JPA,Hibernate或任何其他提供商的方式“干净利落”。 您可以通过自定义SQL查询实现所需(与此问题类似):

@Entity @Table(name="tag") @SQLInsert( sql="INSERT INTO tag(name, count) VALUES (?, ?) ON DUPLICATE KEY UPDATE set count = count + 1") public class Tag {} 

现在你不幸地被Hibernate和MySQL绑定了。 您可以改变其他DB的sql语法:和/或使用存储过程,首先尝试更新并在失败时插入等等。它们都有它们的缺点,所以如果JPA支持这个,它会很方便,但是唉。

关于第二个问题,JPA支持持久化整个对象图,包括集合。