我开始使用JPA并创建了以下(简化)表格;
airport
--------
id (pk)
city
code
...
trip
--------
id (pk)
originAirport_id (fk)
destinationAirport_id (fk)
...
我正在尝试在JPA / Hibernate中映射它。
在我的旅行对象中,我创建了2个机场对象:
private Airport airportFrom;
private Airport airportTo;
我注释了这样的吸气剂:
@ManyToOne
public Airport getAirportFrom() {
return airportFrom;
}
@ManyToOne
public Airport getAirportTo() {
return airportTo;
}
在我的Airport类中,我创建了一个'trip'对象的HashSet
private Set <Trip> trips = new HashSet<Trip>();
并注释了吸气剂:
@OneToMany (mappedBy="airport")
public Set <Trip> getTrips() {
return trips;
}
这在SQL中很容易实现,但我不知道如何在JPA / Hibernate中注释和实现该关系。
任何提示?
答案 0 :(得分:1)
我相信你错过了一些细节。在Airport类中,您拥有的Set<Trip>
次旅行必须与另一个表中的旅行相对应。我建议:
public class Airport {
private Set<Trip> fromTrips = new HashSet<Trip>();
private Set<Trip> toTrips = new HashSet<Trip>();
@OneToMany (mappedBy="airportFrom")
public Set <Trip> getFromTrips() {
return fromTrips;
}
@OneToMany (mappedBy="airportTo")
public Set <Trip> getToTrips() {
return fromTrips;
}
}
“mappedBy”必须指向Many类中的属性名称。在这里,Trip中的两个属性是airportFrom和airportTo。
所以你有两套旅行,fromTrips和toTrips。我希望你对此感到满意吗?
已编辑,这应该是自己的答案。我会投票支持: - )
如果关联需要是双向的,那就是映射它的方式。我不确定它是否必须如此 - 机场没有处理旅行收集的业务。考虑使关联单向而使用查询当/如果您需要找到从/向机场采取的所有旅行(您将能够以这种方式获得单个列表)。