java - 在 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
DB 中的表为候选人存储 FK,我认为设置一个 id 就足够了。但是 JPA 希望我设置候选对象。这迫使我查询候选存储库。
是否需要从候选存储库中查询候选以保存Request
或者如果我有可用的候选 ID,我不能直接设置它吗?
解决方案
您需要使用EntityManager#getReference
或JpaRepository#getOne
。它不会从数据库中获取整个实体,而是将您已经拥有的 id 包装到代理中以同步关系:
Candidate candidate = candidateRepository.getOne(requestUpdate.getCandidate());
Request request = new Request(candidate);
Request save = requestRepository.save(request);
推荐阅读
- android - Admob 显示实时广告,但发布后不显示
- html - Angular5中的翻译属性参数
- sql - 窗口中的 SQL 计数出现次数
- c# - 将数据成功插入SSIS中特定文件的表后,如何将文件一一移动到文件夹?
- angularjs - 如何从Angularjs中的url获取id
- php - 通过 cron 运行时许可证已过期
- android - 我一直在尝试将数据从移动应用程序(Android/IOS)推送到 kafka 代理?
- uwp - 在 UWP 中擦除部分描边
- android - Flutter Widgets 对齐没有响应
- javascript - 存储实时 htmlCollection 与迭代项目 ID 数组(和树遍历)的成本