JPA CascadeType优先级?

时间:2013-05-09 16:35:51

标签: jpa

使用JPA我有一个与CascadeTypes有关的问题。

例如:

@ManyToMany(fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})

与此不同:

@ManyToMany(fetch=FetchType.LAZY, cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})

为什么呢? 我需要cascadetype persist来自动插入我的引用对象 entityclass。我需要合并,因为我不想在我的双重条目 表。但是当我首先定义持久化时,合并不起作用,当我定义时 首先合并,坚持不起作用。

为什么?

1 个答案:

答案 0 :(得分:1)

JPA规范实际上是一个非常易读的文档,可以在这里下载:

https://jcp.org/aboutJava/communityprocess/final/jsr317/index.html

在第384页的内容中,它涵盖了cascade注释的ManyToMany属性:

  

cascade元素指定了一组可级联操作   传播到关联实体。这些操作   cascadable由CascadeType枚举:public enum定义   CascadeType {ALL,PERSIST,MERGE,REMOVE,REFRESH,DETACH};价值   cascade = ALL相当于cascade = {PERSIST,MERGE,REMOVE,REFRESH,   DETACH}。

正如你所看到的,它没有说明订单。可能发生的事情是您的应用程序有时使用需要持久保存的新对象,有时需要从数据库加载一个然后需要合并的对象。换言之,它是一个应用问题。

我个人使用DIY方法在持久化上下文中合并实体。这里有一篇关于这个主题的好文章:

http://blog.xebia.com/2009/03/23/jpa-implementation-patterns-saving-detached-entities/

相关问题