我有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一起添加到Parent实体处的汽车中来防止这种情况的发生-但是现在当我尝试从Car中访问Parent时,它给了我空值。 / p>
如果我希望通过孩子访问父项时不理会汽车,而从汽车访问父项时不让Parent = null,该怎么办?
谢谢