使用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。我需要合并,因为我不想在我的双重条目 表。但是当我首先定义持久化时,合并不起作用,当我定义时 首先合并,坚持不起作用。
为什么?
答案 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/