我的应用程序中有两个持久性对象:事物和附加到事物的标签。该应用程序可以生成带有附加标签的事物集合。标签对象具有唯一的名称(使用相同标签两次标记某物是没有意义的)。
插入事物(附加标签对象)时,其中一些具有相同名称的标签对象可能已存在于数据库中。现在这是我不记得关于JPA的部分,有没有办法告诉JPA,如果它违反了唯一约束,它不应该尝试将相应的对象添加到数据库中?或者有没有一种方法可以有效地做到这一点,而不必首先获取所有对象,然后将集合合并到内存中,然后将所有内容写回?
我还想知道是否可以一次持久保存整个集合,或者在使用 JPA 时是否必须为每个对象调用 persist ?
我不知道有什么方法可以“干净”地做到这一点,无论是使用 JPA 还是使用 Hibernate 或任何其他提供商。不过,您可以通过自定义 SQL 查询来实现您想要的目标(类似于这个问题 https://stackoverflow.com/questions/913341/can-hibernate-work-with-mysqls-on-duplicate-key-update-syntax):
@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:s 的 sql 语法,和/或使用存储过程,首先尝试更新并在失败时插入等。它们都有各自的缺点,因此如果 JPA 支持这一点将会很方便,但可惜。
关于第二个问题,JPA 支持持久化整个对象图,包括集合。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)