这是一个ManyToMany JPA / Hibernate关系还是有另一种方法来映射这个?

时间:2009-09-15 20:34:36

标签: hibernate orm jpa persistence seam

我开始使用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中注释和实现该关系。

任何提示?

1 个答案:

答案 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。我希望你对此感到满意吗?


经过 ChssPly76 的精彩评论后,

已编辑,这应该是自己的答案。我会投票支持: - )

  

如果关联需要是双向的,那就是映射它的方式。我不确定它是否必须如此 - 机场没有处理旅行收集的业务。考虑使关联单向而使用查询当/如果您需要找到从/向机场采取的所有旅行(您将能够以这种方式获得单个列表)。