在 JPA 中保存具有一对一关系的实体

Saving an entity with one-to-one relation in JPA

我有一个实体Request:

@Entity
public class Request {

    @Id
    @GeneratedValue
    private Long id;

    @OneToOne
    private Candidate candidate;

    ...
}

要创建上述实体并将其保存到 JPA 存储库中,我将执行如下操作:

Candidate candidate = candidateRepository.findById(requestUpdate.getCandidate()).orElse(null);

Request request = new Request(candidate);
Request save = requestRepository.save(request);

由于Request table在数据库中为候选人存储了FK,我认为设置一个id就足够了。但是 JPA 希望我设置候选对象。这迫使我查询候选存储库。

是否需要从候选人库中查询候选人以保存Request 要么 如果我有candidate id可用,我不可以直接设置吗?

您需要使用 EntityManager#getReferenceJpaRepository#getOne。它不会从数据库中获取整个实体,而是将您已有的 id 包装到代理中以同步关系:

Candidate candidate = candidateRepository.getOne(requestUpdate.getCandidate());

Request request = new Request(candidate);
Request save = requestRepository.save(request);