JPA在保存对象时避免了对关联对象的额外读取调用

时间:2018-10-01 07:52:12

标签: java spring jpa

我有两个像下面这样的JPA实体,分别为我在下面的代码中省略的每个字段分别具有getter和setter。

1. 

@Entity
@Table(name = "posts")
public class Post {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;


    @Column(unique = true)
    private String title;
}

2. 
@Entity
@Table(name = "comments")
public class Comment {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "post_id", nullable = false)
    private Post post;
}

保存评论对象时,我必须执行以下操作

Post post = postRepository.findById(postId)
comment.setPost(post);
commentRepository.save(comment);

问题是如何避免在保存评论之前加载Post对象。基本上,我想避免这种额外的数据库读取调用,但是我不想失去关联。

Post post = postRepository.findById(postId);

一种选择是使用如下所示的brand_id,但是我松开了我不想松开的关联。

private Long post_id;

1 个答案:

答案 0 :(得分:3)

EntityManager.getReference(...) 

应该可以解决问题。