【问题标题】:JPA and unique fieldsJPA 和独特的领域
【发布时间】:2010-07-18 10:12:57
【问题描述】:

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

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

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

【问题讨论】:

    标签: java jpa object-persistence


    【解决方案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:s 的 sql 语法,和/或使用存储过程,先尝试更新并在失败时插入等。它们都有其缺点,因此如果 JPA 支持这一点会很方便,但是唉。

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

    【讨论】:

    • 最后一个问题:如果我持久化一个对象,该对象引用了一个已经持久化的对象并且级联打开,会发生什么?
    猜你喜欢
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 2013-02-10
    • 2010-09-06
    相关资源
    最近更新 更多