您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

JPA OneToMany与CascadeType一起保留。ALL不会保留子项

JPA OneToMany与CascadeType一起保留。ALL不会保留子项

您正在混合两个非常不同的概念。

ACascadeType处理将什么动作串连到关系。当指定时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已初始化。

希望能有所帮助。

dotnet 2022/1/1 18:15:56 有435人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶