2011-11-02 57 views
0

考虑下面的Hibernate映射:如何在单个POJO中表示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表。您将如何重构映射/模型,以便Customer Java对象继续包含基于customerId的行程和酒店对象列表?所述旅馆和行程对象仍然需要由Hibernate管理。

我能想到的最好的方式是当调用者请求一个List时推迟到DAO的Customer对象。是否有更清晰的方法可以让客户对象住在每个行程和酒店对象中?

+0

为什么要删除CUSTOMER表? – Santosh

+0

这实际上是假设的,但让我们假设CUSTOMER表正在转向其他不可访问的模式。 – emailchaos

回答

0

删除客户表后,客户对象将不再由Hibernate管理。如果您仍想拥有包含行程和酒店的客户对象,则需要以编程方式完成。我不确定你是否真的在寻找这个。这样做的

一种可能的方式是

  1. 比方说你有一个方法GETCUSTOMER()一个DAO。这接受客户ID。
  2. 此方法触发两个更多的查询,以根据客户ID获取Itinerary和Hotel列表。
  3. 它创建一个Customer对象,并将Itinerary和Hotel的列表放入它并返回并填充客户对象。
+0

谢谢,Santosh。是的,这与我现在所拥有的接近: 1.有人调用getCustomer(customerId)。一个新的客户对象返回一个customerId成员变量。 2.有人打电话给customer.getItineraries()。客户对象只是根据行程Da来检索当前客户的行程。 什么是理想的多个休眠映射,将行程和酒店映射到Customer对象,但我不确定Hibernate是如何工作的... – emailchaos

相关问题