在.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);
    }
}