Как вы представляете коллекции объектов Hibernate в одном POJO? - PullRequest
0 голосов
/ 02 ноября 2011

Рассмотрим следующие отображения Hibernate:

<hibernate-mapping package="org.example">
  <class name="Customer" table="CUSTOMER">
    <id name="customerId" column="customer_id"/>

    <bag name="itineraries" table="ITINERARY" inverse="true" cascade="all">
      <key column="customer_id"/>
      <one-to-many class="Itinerary"/>
    </bag>

    <bag name="hotels" table="HOTEL" inverse="true" cascade="all">
      <key column="customer_id"/>
      <one-to-many class="Hotel"/>
    </bag>
  </class>
</hibernate-mapping>

<hibernate-mapping package="org.example">
    <class name="Itinerary" table="ITINERARY">
      <many-to-one name="customer" column="customer_id" update="false" not-null="true"/>
      ...other properties...
    </class>
</hibernate-mapping>

<hibernate-mapping package="org.example">
    <class name="Hotel" table="HOTEL">
      <many-to-one name="customer" column="customer_id" update="false" not-null="true"/>
      ...other properties...
    </class>
</hibernate-mapping>

Теперь скажите, что вам нужно удалить таблицу CUSTOMER. Как бы вы осуществили рефакторинг отображений / модели таким образом, чтобы Java-объект Customer по-прежнему содержал списки объектов маршрута и отелей на основе customerId? Отмеченные объекты отелей и маршрутов по-прежнему должны управляться Hibernate.

Лучшее, что я могу придумать, - это объект Customer, откладывающий до DAO, когда вызывающие абоненты запрашивают List. Есть ли более чистый подход, который позволит объекту «Клиент» жить в каждом объекте «Маршрут» и «Отель»?

1 Ответ

0 голосов
/ 02 ноября 2011

После удаления таблицы клиентов объект клиента больше не будет управляться Hibernate.Если вы все еще хотите иметь объект customer, содержащий маршрут и отель, то это необходимо сделать программно.Я не уверен, действительно ли вы ищете это.

Один из возможных способов сделать это -

  1. Допустим, у вас есть DAO с методом getCustomer ().Принимает идентификатор клиента.
  2. Этот метод запускает еще два запроса для получения списков маршрутов и отелей на основе идентификаторов клиентов.
  3. Создает объект клиентов и устанавливает списки маршрутов и отелейв него и возвращает его и заполненный объект клиента.
...