我在通过 OpenJPA 实现利用 JPA 1.0 时遇到问题。我的数据模型由一个 Trip 组成,该 Trip 与 Leg 具有一对多关系,与 Passenger 具有一对多关系。 Leg 和 Passenger 在 PassengerLeg 中有关联。这被映射为双向 OneToMany/ManyToOne。所以本质上我的数据模型中有一颗钻石。如果一次行程有 2 条航段和 3 名乘客,则将有 6 条乘客航段。对于各种用例,我需要从每个实体的各个方向进行。现在,当我尝试急切地加载所有内容时,PassengerLeg 中的leg 字段将为空,我不明白为什么。这是我的课程的简要表示:
@Entity
public class Trip {
@OneToMany(mappedBy = "trip", fetch = FetchType.EAGER)
private List<Leg> legs;
@OneToMany(mappedBy = "trip", fetch = FetchType.EAGER)
private List<Passenger> passengers;
}
@Entity
public class Leg {
@ManyToOne
@JoinColumn(name = "TRIP_ID")
private Trip trip;
@OneToMany(mappedBy = "leg", fetch = FetchType.EAGER)
private List<PassengerLeg> passengers;
}
@Entity
public class Passenger {
@ManyToOne
@JoinColumn(name = "TRIP_ID")
private Trip trip;
@OneToMany(mappedBy = "passenger", fetch = FetchType.EAGER)
private List<PassengerLeg> legs;
}
@Entity
public class PassengerLeg {
@ManyToOne
@JoinColumn(name = "LEG_ID")
private Leg leg; //this will be null
@ManyToOne
@JoinColumn(name = "PASSENGER_ID")
private Passenger passenger;
}
我花了无数的时间阅读文档和我在谷歌上找到的任何东西来找出可能导致这种情况的原因,但我没有任何运气。任何人都知道什么会导致这种情况?如果您需要有关类/注释的更多信息,请告诉我。
JPA 永远不会急切地加载多方,因为这可能是一项耗时的操作。默认获取 如 JPA 规范中所述
- 一对一--->获取渴望
- 一对多 ---> 惰性获取
- 多对一---> fetch Eager
- 多对多---> 惰性获取
我也不会建议您使用 Eager fetch,因为它是繁重的操作
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)