在.persist()之后不填充JPA实体关系
这是我的两个实体的示例:在.persist()之后不填充JPA实体关系,jpa,Jpa,这是我的两个实体的示例: @Entity public class Post implements Serializable { @OneToMany(mappedBy = "post", fetch = javax.persistence.FetchType.EAGER) @OrderBy("revision DESC") public List<PostRevision> revisions; @Entity(name="post_revision")
@Entity
public class Post implements Serializable {
@OneToMany(mappedBy = "post", fetch = javax.persistence.FetchType.EAGER)
@OrderBy("revision DESC")
public List<PostRevision> revisions;
@Entity(name="post_revision")
public class PostRevision implements Serializable {
@ManyToOne
public Post post;
private Integer revision;
@PrePersist
private void prePersist() {
List<PostRevision> list = post.revisions;
if(list.size() >= 1)
revision = list.get(list.size() - 1).revision + 1;
else
revision = 1;
}
我认为,坚持“后”之后,它就变成了“管理”,所有的关系都应该从现在开始填充
谢谢你的帮助
(注意:公共属性仅用于演示)否。从数据库加载实体时,Hibernate将填充关系。但是,当你坚持或改变它们时,你有责任维护双方的关系
由于Hibernate实体也是POJO,您将在其他层和单元测试中使用它们,所以您应该确保不变量是正确的。例如,修订列表不应为空。最初它应该是空的。将您的
Post
实体转换为:
@Entity
public class Post implements Serializable {
@OneToMany(mappedBy = "post", fetch = javax.persistence.FetchType.EAGER)
@OrderBy("revision DESC")
public List<PostRevision> revisions = new ArrayList<PostRevision>();
public void addRevision(PostRevision revision) {
if (post.revisions.isEmpty()) {
revision.setRevision(1);
} else {
revision.setRevision(post.revisions.get(post.revisions.size() - 1));
}
revision.setPost(this);
getRevisions().add(revision);
}
}
@实体
公共类Post实现了可序列化{
@OneToMany(mappedBy=“post”,fetch=javax.persistence.FetchType.EAGER)
@订购人(“修订说明”)
公共列表修订=新建ArrayList();
公共作废添加修订(修订后){
if(post.revisions.isEmpty()){
修订版。setRevision(1);
}否则{
revision.setRevision(post.revisions.get(post.revisions.size()-1));
}
修订。设置邮政编码(本);
getRevisions()。添加(修订);
}
}
并确保在向帖子添加修订时使用addRevision。使用此解决方案,您还应该删除
@PrePersist
侦听器。谢谢您的回答。然而,在我的例子中,如何使EclipseLink从数据库加载实体?我是否使用EntityManager.find()来执行此操作?我也试过了,但也不起作用(修订版仍然为空)。
@Entity
public class Post implements Serializable {
@OneToMany(mappedBy = "post", fetch = javax.persistence.FetchType.EAGER)
@OrderBy("revision DESC")
public List<PostRevision> revisions = new ArrayList<PostRevision>();
public void addRevision(PostRevision revision) {
if (post.revisions.isEmpty()) {
revision.setRevision(1);
} else {
revision.setRevision(post.revisions.get(post.revisions.size() - 1));
}
revision.setPost(this);
getRevisions().add(revision);
}
}