Рассмотрим следующие отображения 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. Есть ли более чистый подход, который позволит объекту «Клиент» жить в каждом объекте «Маршрут» и «Отель»?