我必须将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文件映射它?
答案 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
等...类映射到相应的表(可能您已经拥有)。