Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate JPA OneToMany坚持使用CascadeType.ALL';不要固执地对待孩子_Hibernate_Jpa_One To Many_Persist - Fatal编程技术网

Hibernate JPA OneToMany坚持使用CascadeType.ALL';不要固执地对待孩子

Hibernate JPA OneToMany坚持使用CascadeType.ALL';不要固执地对待孩子,hibernate,jpa,one-to-many,persist,Hibernate,Jpa,One To Many,Persist,我有一个问题,就是如何将JPA与OneToMany关系(双向)以及CascadeType.ALL一起使用。基于vladpost(),使用CascadeType.ALL坚持一对一关系也应该坚持 Post post = new Post(); post.setName("Hibernate Master Class"); Comment comment1 = new Comment(); comment1.setReview("Good post!"); Comment comment2 = ne

我有一个问题,就是如何将JPA与OneToMany关系(双向)以及CascadeType.ALL一起使用。基于vladpost(),使用CascadeType.ALL坚持一对一关系也应该坚持

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);
但是,就我而言:

//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<>();

因此,主要的问题是:我是否应该始终兼顾双方,即使存在级联类型。所有这些都在关系所有者方面?

您混合了两个非常不同的概念

一个
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;
}
这些方法确保根据您的要求正确维护
PostDetails
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
之间的关系已初始化


希望这能有所帮助。

您混合了两个非常不同的概念

一个
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;
}
这些方法确保根据您的要求正确维护
PostDetails
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
之间的关系已初始化


希望能有所帮助。

非常感谢。我没注意到。你的回答帮助我消除了对我问题的任何疑问。非常感谢。我没注意到。你的回答帮助我消除了对我的问题的任何疑虑。