使用 cascade=CascadeType.TYPE_NAME 的目的是啥
Posted
技术标签:
【中文标题】使用 cascade=CascadeType.TYPE_NAME 的目的是啥【英文标题】:What is purpose of using cascade=CascadeType.TYPE_NAME使用 cascade=CascadeType.TYPE_NAME 的目的是什么 【发布时间】:2017-01-10 05:52:22 【问题描述】:我正在通过 spring 项目,在一些模型类中有类型
cascade=CascadeType.ALL
写入参数例如:,
@ManyToOne(fetch = FetchType.EAGER,cascade=CascadeType.ALL) @JoinColumn(name="USER_ID", nullable=false)
私人用户用户;
我的问题是我们应该出于什么目的使用它?
谢谢你。
【问题讨论】:
谷歌搜索“休眠级联”应该为您提供一些答案... 【参考方案1】:该属性表示与类(Outer class)的对象关联的所有(因为CascadeType.ALL)操作将对User类(Inner class)的关联对象执行。
例如:
@Entity
public class Group
@ManyToOne(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
@JoinColumn(name="USER_ID", nullable=false)
private User user`
如果您尝试从数据库中删除组,则会导致关联用户被删除。
Enum CascadeType 将帮助您指定要与关联用户执行的操作类型。
如果你想指定级联执行只是为了删除和持久化你必须做这样的事情:
@ManyToOne(cascade = CascadeType.REMOVE, CascadeType.PERSIST, fetch = FetchType.EAGER)
【讨论】:
以上是关于使用 cascade=CascadeType.TYPE_NAME 的目的是啥的主要内容,如果未能解决你的问题,请参考以下文章
如何在一对一关系中使用 onDelete: 'CASCADE'
使用 Cascade.All 时出现 TransientObjectException
使用 cascade=CascadeType.TYPE_NAME 的目的是啥