6

使用 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 持久化以在我的实体类中自动插入引用的对象。我需要合并,因为我不想在我的表中有双重条目。但是当我先定义持久化时,合并不起作用,当我先定义合并时,持久化不起作用。

为什么?

4

1 回答 1

1

JPA 规范实际上是一个可读性很强的文档,可以在这里下载:

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

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

级联元素指定传播到关联实体的可级联操作集。可级联的操作由 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/

于 2013-12-17T17:28:11.700 回答