2010-07-18 42 views
2

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

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

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

回答

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的。你可以改变其他数据库的sql语法,和/或使用存储过程,首先尝试更新并插入失败等等。它们都有它们的缺点,所以如果JPA支持这一点,它会很方便,但是可惜。

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

+0

最后一个问题:如果我坚持一个对象的引用,那么对象的引用已经存在并且级联处于打开状态,会发生什么? – Nils 2010-07-19 09:02:33