我在通过 OpenJPA 实现利用 JPA 1.0 时遇到问题。我的数据模型由一个 Trip 组成,它与 Leg 具有 OneToMany 关系,与 Passenger 具有 OneToMany 关系。 Leg 和 Passenger 在 PassengerLeg 中有关联。这被映射为双向 OneToMany/ManyToOne。所以基本上我的数据模型中有一颗钻石。如果一个行程有 2 条腿和 3 名乘客,那么就会有 6 个 passengerLegs。对于各种用例,我需要从每个实体的每个方向走。现在,当我尝试急切加载所有内容时,PassengerLeg 中的 leg 字段将为空,我无法弄清楚原因。这是我的类(class)的简略表示:
@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;
}
我花了无数时间阅读文档和我在 Google 上可以找到的任何内容,以找出可能导致此问题的原因,但我没有任何运气。任何人有任何想法会导致这种情况吗?如果您需要有关类/注释的更多信息,请告诉我。
最佳答案
JPA 永远不要急切地加载多边,因为这可能是一项耗时的操作。默认获取如 JPA 规范中所述
- 一对一--->获取渴望
- 一对多 ---> 延迟获取
- 多对一--->获取Eager
- 多对多--->延迟获取
另外,我也不建议你去使用 Eager fetch,因为它是繁重的操作
关于java - JPA 不急于加载所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9711148/