使用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来自动在我的实体类中插入引用的对象.我需要合并,因为我不希望在我的表中有双重条目.但是当我首先定义持久化时,合并不起作用,当我首先定义合并时,持久化不起作用.
为什么?
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/
| 归档时间: |
|
| 查看次数: |
580 次 |
| 最近记录: |