我的应用中有两个持久性对象:附在事物上的东西和标签。该应用程序可以生成带有标签的东西的集合。标记对象具有唯一的名称(使用相同的标记标记两次没有意义)。
当插入Thing(附加了标记对象)时,db中可能已经存在一些具有相同名称的标记对象。现在这里是我不记得有关JPA的部分,有没有办法告诉JPA如果它违反了唯一约束,它不应该尝试将相应的对象添加到db?或者有没有办法有效地做到这一点,不必首先获取所有对象,然后将集合合并到内存中,然后将所有内容写回来?
我也想知道是否可以立即保留整个集合,或者在使用JPA时是否必须为每个对象调用persist?
答案 0 :(得分:1)
我不知道有什么方法可以“干净利落”地执行此操作,无论是JPA还是Hibernate或任何其他提供商。您可以通过自定义SQL查询实现所需(与this question类似):
@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支持持久化整个对象图,包括集合。