JPA CascadeType优先级?

use*_*812 6 jpa

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

例如:

@ManyToMany(fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
Run Code Online (Sandbox Code Playgroud)

与此不同:

@ManyToMany(fetch=FetchType.LAZY, cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
Run Code Online (Sandbox Code Playgroud)

为什么?我需要cascadetype persist来自动在我的实体类中插入引用的对象.我需要合并,因为我不希望在我的表中有双重条目.但是当我首先定义持久化时,合并不起作用,当我首先定义合并时,持久化不起作用.

为什么?

HDa*_*ave 1

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

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

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

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