как добавить отношения один ко многим в спящем режиме? - PullRequest
1 голос
/ 30 января 2012

В базе данных у меня есть две таблицы:

- Destination:
 - idDestination
 - name

- Airport:
 - idAirport
 - idDestination // FK into Destination city
 - name

, где:

  • 1 В пункте назначения (читай: город) много аэропортов
  • 1Аэропорт принадлежит 1 городу
  • Отсюда: 1-много отношений между пунктами назначения-аэропортами

Мои классы Java выглядят так:

class Destination{
 private Integer idDestination;
 private String name;

 // getter and setters
}

class Airport{
 private Integer idAirport;
 private Destination city;
 private String name;
}

// Separate class for airports in city, since city is being used in a lot of other places
// and I'd like to keep Destination class clean
class CityAirports{
 private Destination City;
 private Set<Airport> airports;
}

Отображения Hibernate: Airport.hbm.xml

<hibernate-mapping>
    <class name="org.wah.dao.Airport" table="AIRPORT">
        <id name="idAirport" type="java.lang.Integer">
            <column name="IDAIRPORT" />
            <generator class="identity" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" />
        </property>
        <many-to-one name="city" class="org.wah.dao.Destination">
            <column name="IDCITY" />
        </many-to-one>
    </class>
</hibernate-mapping>

Мне нужно определить другое отображение для CityAirports, чтобы - получить все аэропорты в городе.- добавить новый аэропорт в город.

Я не уверен, как будет выглядеть карта спящего режима?Может кто-нибудь подсказать, как это сделать?

Ответы [ 4 ]

0 голосов
/ 30 января 2012

Действительно ли класс CityAirport необходим?Почему бы просто не поместить список Airport в вашу Destination?

Не уверен насчет конфигурации XML для этого.Но, используя аннотации, вы получите что-то вроде этого:

@Entity
public class Destination {
   @Id
   @GeneratedValue
   private Integer idDestination;

   private String name;
   @OneToMany(mappedBy="destination")
   Set<Airport> airports;
    [...]
}

и класс аэропорта:

@Entity
public class Airport {
    @Id
    @GeneratedValue
    private Integer id;

    @ManyToOne
    private Destination destination;
    [...]
}
0 голосов
/ 30 января 2012

Может быть что-то вроде этого?

<class name="org.wah.dao.CityAirports">
        <id name="caID">
            <generator class="assigned" />
        </id>

        <set name="Airport" cascade="save-update" >
            <key column="apID" />
            <one-to-many class="org.wah.dao.Airport" />
        </set>
        <many-to-one name="city" class="org.wah.dao.Destination">
            <column name="IDCITY" />
        </many-to-one>

</class>
0 голосов
/ 30 января 2012

для назначения карты,

<hibernate-mapping>
 <class name="org.wah.dao.Destination" table="DESTINATION">
 <id name="idDestination" type="int" column="DESTINATION_ID">
     <generator class="native" />
 </id>
 <property name="name" type="string" not-null="true" length="100" 
    column=DESTINATION_NAME" />
 <set name="destinationAirPorts" table="DESTINATION_AIRPORT" cascade="all">
  <key column="DESTINATION_ID" />
  <many-to-many column="IDAIRPORT" unique="true" class="org.wah.dao.Airport" />
 </set>
</class>

для отображения аэропорта,

<hibernate-mapping>
 <class name="org.wah.dao.Airport" table="AIRPORT">
 <id name="idAirport" type="int" column="IDAIRPORT">
     <generator class="native" />
 </id>
 <property name="name" type="string" not-null="true" length="100" 
    column=NAME" />

</class>
</hibernate-mapping>
0 голосов
/ 30 января 2012

Прочитайте упомянутый пример здесь , который описывает решение, которое вы ищете аккуратно. Основная идея заключается в том, что вы используете отношение «многие ко многим» из города в аэропорт и накладываете уникальное ограничение на IDAIRPORT

...