java - 懒惰的@OneToOne
问题描述
我有 3 个实体:父实体:
@Entity
public class Parent{
@Id
private Long id;
@OneToOne(mappedBy = "parentId", cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
private Car car;
@OneToMany(mappedBy = "parentId", cascade = CascadeType.MERGE)
@Fetch(FetchMode.SUBSELECT)
private List<Kid> kids;
和孩子实体:
@Entity
public class Kid{
@Id
private Long id;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name="PARENT_ID")
private Parent parentId;
和汽车实体:
@Entity
public class Car{
@Id
private Long id;
@OneToOne(cascade = CascadeType.REMOVE)
@PrimaryKeyJoinColumn(name="PARENT_ID")
private Parent parentId;
数据库是:
Parent: ID
Kid: ID, PARENT_ID
Car: ID, PARENT_ID
每个有车的父母——没有孩子,反之亦然——每个有孩子的父母都没有车。
问题是,如果父母有很多孩子 - 在每次访问孩子时,Hibernate 会调用试图通过其 parentId 获取汽车的冗余查询。(例如 SELECT * FROM CAR WHERE PARENT_ID = ?)
我试图通过将 LAZY 添加到父实体的汽车以及 Car 实体的 PrimaryKeyJoinColumn 来防止这种情况发生 - 但现在当我尝试从汽车访问父实体时,它给了我 null。
如果我希望它在通过 Kid 访问 Parent 时忽略 Car,并且在从 Car 访问 Parent 时没有得到 Parent = null,我该怎么办?
谢谢
解决方案
推荐阅读
- c - cs50 pset4 - 边缘检测过滤器不起作用 - sobel 算子
- python - Kivy using Canvas: Key error with line while starting beyond boundaries
- inno-setup - Inno Setup:如何调整下部窗格区域的大小?
- c++ - 模板类中的 C++ 嵌套类
- javascript - 在 JavaScript 中链接 URL
- python-3.x - 将一项任务的输出发送到气流中的另一项任务
- php - 子域分组错过了 laravel 中的斜线
- gradle - 使用 gradle 从资源中压缩文件夹
- python - 部署 Orange 3 模型
- mysql - 更改从传感器接收到的 MySQL 数据