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

当插入物品(附加标签对象)时,其中一些标签对象中可能已经存在于dB中。现在这里是我不记得JPA的部分,有没有办法告诉JPA,它不应该尝试将相应的对象添加到DB,如果它违反了唯一的约束?或者有一种有效的方法可以先做它必须先取出所有对象,然后在内存中合并集合,然后写回来返回?

我也想知道它是否有可能立即持续整个集合,或者在使用JPA时必须为每个对象持续调用?

有帮助吗?

解决方案

我不知道任何方式'干净地',既不与jpa也不是休眠或任何其他提供者。您可以使用自定义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:s和/或使用存储过程的SQL语法,首先尝试更新并插入故障等。它们都有其缺点,因此如果JPA支持这一点,则可以方便,但唉。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top