Hibernate映射条件多对一

时间:2009-11-25 14:04:28

标签: hibernate

我必须将lecagy数据库映射为只读目的,其中包含以下结构:

Table MAIN: 
id productId productType

Table PRODUCT_A: 
id description_a

Table PRODUCT_B: 
id description_b

Table PRODUCT_C: 
id description_c

根据productTyp列中的值,productId指的是PRODUCT_A,PRODUCT_B或PRODUCT_C。

对于每个表,我创建了一个Java实体。 Main类包含每个产品的一个集合。

产品与主类没有'是'关系。在其他情况下作为独立实体使用。

有没有办法使用hbm.xml文件映射它?

2 个答案:

答案 0 :(得分:3)

看起来您正在使用鉴别器使用每个子类策略的表来寻找继承。在Java中,每个PRODUCT_X类都应该扩展Main类。 This page解释了实施此策略的详细信息。

答案 1 :(得分:2)

正确的映射方式是<any>

<class name="Main" table="MAIN">
  ...
  <any name="product" id-type="long" meta-type="string">
    <meta-value value="PRODUCT_A" class="ProductA"/>
    <meta-value value="PRODUCT_B" class="ProductB"/>
    <meta-value value="PRODUCT_C" class="ProductC"/>
    <column name="productType"/>
    <column name="productId"/>
  </any>
</class>

您必须将相应的ProductA等...类映射到相应的表(可能您已经拥有)。