【发布时间】:2012-03-31 10:54:23
【问题描述】:
我在通过 OpenJPA 实现利用 JPA 1.0 时遇到问题。我的数据模型包含一个与 Leg 具有 OneToMany 关系以及与 Passenger 具有 OneToMany 关系的 Trip。 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;
}
我花了无数时间阅读文档和在 Google 上可以找到的任何内容,以找出可能导致此问题的原因,但我没有任何运气。任何人有任何想法会导致这种情况吗?如果您需要有关类/注释的更多信息,请告诉我。
【问题讨论】:
-
你不是在那些 OneToMany 注释中缺少
mappedBy吗? -
谢谢。我添加了在此示例中忘记的 mappedBy 属性,但在我的应用程序中。 OneToMany 注释上也缺少一个 fetch 属性。