您正在混合两个非常不同的概念。
A
CascadeType处理将什么动作串连到关系。当指定时
CascadeType.ALL,您告诉持久性提供者,只要您持久,合并或删除该实体,这些操作都将被复制到关系中。
但是,为了使级联操作起作用,必须首先确保正确管理该关系。如果查看Vlad的帖子,您会注意到上两个非常重要的方法
Post。
public void addDetails(PostDetails details) { this.details = details; details.setPost( this );}public void removeDetails() { this.details.setPost( null ); this.details = null;}这些方法可确保根据您的要求正确维护a
PostDetails和a 之间的关系
Post。因此,假设以下映射:
public class Post { @oneToOne(cascade = CascadeType.ALL, mappedBy = "post", orphanRemoval = true) private PostDetails details;}您可以按照以下步骤执行它们的持久化操作:
PostDetails details = new PostDetails();details.setUser( currentUser );Post post = new Post();post.addDetails( details );session.persist( post );
您会注意到我使用
addDetails而不是典型的,
setDetails因为我想确保
Post和之间的关系
PostDetails已初始化。
希望能有所帮助。



