在 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#getReference
或 JpaRepository#getOne
。它不会从数据库中获取整个实体,而是将您已有的 id 包装到代理中以同步关系:
Candidate candidate = candidateRepository.getOne(requestUpdate.getCandidate());
Request request = new Request(candidate);
Request save = requestRepository.save(request);
我有一个实体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#getReference
或 JpaRepository#getOne
。它不会从数据库中获取整个实体,而是将您已有的 id 包装到代理中以同步关系:
Candidate candidate = candidateRepository.getOne(requestUpdate.getCandidate());
Request request = new Request(candidate);
Request save = requestRepository.save(request);