@OneToOne与懒惰

时间:2018-08-02 06:29:57

标签: java hibernate

我有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,该怎么办?

谢谢

0 个答案:

没有答案