Это взаимоотношения ManyToMany JPA / Hibernate или есть другой способ отобразить это? - PullRequest
1 голос
/ 16 сентября 2009

Я начал работать с 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 я создал HashSet для объектов "trip"

    private Set <Trip> trips = new HashSet<Trip>();

И аннотировал геттер:

    @OneToMany (mappedBy="airport")
public Set <Trip> getTrips() {
    return trips;
}

Это было бы просто реализовать в SQL, но я не знаю, как аннотировать и реализовать эти отношения в JPA / Hibernate.

Какие-нибудь советы?

1 Ответ

1 голос
/ 16 сентября 2009

Полагаю, вы упустили небольшую деталь. В классе 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.

Таким образом, у вас есть два комплекта поездок, из поездки и поездки. Я надеюсь, что вы в порядке с этим?


Отредактировано , после превосходного комментария ChssPly76 , которое заслуживает того, чтобы быть собственным ответом. Я бы проголосовал за это: -)

Если связь должна быть двунаправленной, это способ отобразить ее. Я не уверен, что так и должно быть - у аэропорта нет бизнеса, связанного с коллекциями поездок. Попробуйте вместо этого сделать однонаправленную ассоциацию и использовать запрос, когда / если вам нужно найти все поездки, совершенные из / в аэропорт, о котором идет речь (вы также сможете получить один список таким образом).

...