2

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

当插入一个事物(附加了标签对象)时,其中一些具有相同名称的标签对象可能已经存在于数据库中。现在这是我不记得关于 JPA 的部分,有没有办法告诉 JPA 如果它违反了唯一约束,它不应该尝试将相应的对象添加到数据库中?或者有没有办法有效地做到这一点而不必先获取所有对象,然后将集合合并到内存中,然后将所有内容写回?

我还想知道是否可以一次持久化整个集合,或者在使用 JPA 时是否必须为每个对象调用持久化?

4

1 回答 1

1

我不知道有任何“干净”的方法,无论是使用 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:s 的 sql 语法,和/或使用存储过程,先尝试更新并在失败时插入等。它们都有其缺点,因此如果 JPA 支持这一点会很方便,但是唉。

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

于 2010-07-18T10:29:49.627 回答