0 hibernate jpa one-to-many persist
我有关于将 JPA 与 OneToMany 关系(双向)以及 CascadeType.ALL 一起使用的问题。基于vlad post(https://vladmihalcea.com/a-beginners-guide-to-jpa-and-hibernate-cascade-types/),使用CascadeType.ALL坚持OneToMany关系,也应该坚持
Post post = new Post();
post.setName("Hibernate Master Class");
Comment comment1 = new Comment();
comment1.setReview("Good post!");
Comment comment2 = new Comment();
comment2.setReview("Nice post!");
post.addComment(comment1);
post.addComment(comment2);
session.persist(post);
Run Code Online (Sandbox Code Playgroud)
但是,就我而言:
//Entity SharedAdvertisementKey
@ManyToOne
@JoinColumn(name="SHARED_AD_ID", nullable=false)
private SharedAdvertisement sharedAdvertisement;
//Entity SharedAdvertisements
@OneToMany(mappedBy="sharedAdvertisement", cascade=CascadeType.ALL)
private List<SharedAdvertisementKey> sharedAdvertisementKey = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
仅当我在保留关系所有者之前链接实体的双方时,它才有效:
sharedAdvertisementKey.setSharedAdvertisement(sharedAdvertisement);
sharedAdvertisement.addSharedAdvertisementKey(sharedAdvertisementKey);
Run Code Online (Sandbox Code Playgroud)
所以主要问题是:即使关系方的所有者有 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;
}
Run Code Online (Sandbox Code Playgroud)
这些方法可确保根据您的要求正确维护aPostDetails
和 a之间的关系。Post
因此假设以下映射:
public class Post {
@OneToOne(cascade = CascadeType.ALL, mappedBy = "post", orphanRemoval = true)
private PostDetails details;
}
Run Code Online (Sandbox Code Playgroud)
您可以按如下方式执行两者的持久化操作:
PostDetails details = new PostDetails();
details.setUser( currentUser );
Post post = new Post();
post.addDetails( details );
session.persist( post );
Run Code Online (Sandbox Code Playgroud)
您注意到我使用了addDetails
而不是典型的,setDetails
因为我想确保 和 之间的关系Post
已PostDetails
初始化。
希望有帮助。
归档时间: |
|
查看次数: |
10610 次 |
最近记录: |