首页 > 解决方案 > 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;

标签: javaspringjpa

解决方案


EntityManager.getReference(...) 

这应该够了吧。


推荐阅读