2012-09-24 124 views
0

映射有一个只读的“目录”,这在表中已预先配置的数据实体。 'BookCatalog'是另一个与'Catalog'表具有多对一关系的实体。相关实体的列关联实体领域

目前我的配置文件如下,

<!--Catalog --> 
<class name="xxxx.Catalog" table="CATALOG" mutable="false"> 
    .... 
    .... 
    <property name="a" type="string"> 
     <column name="A" /> 
    </property> 
    <property name="b" type="string"> 
     <column name="B" /> 
    </property> 
</class> 

<!-- Book Catalog --> 
<class name="xxxx.BookCatalog" table="BOOK_CATALOG"> 
    .... 
    .... 
    <many-to-one name="base_catalog" class="xxxx.Catalog" fetch="select"> 
     <column name="BASE_CATALOG_ID" length="36" /> 
    </many-to-one> 

    <property name="c" type="string"> 
     <column name="C" /> 
    </property> 
</class> 

目前,如果我想访问只读属性一个& B,我需要通过“base_catalog”字段访问。

我更喜欢将BookCatalog制作为目录的子类,并且从'CATALOG'只读表映射属性a & b。

我知道我可以在CATALOG表中的每个字段都使用'公式',但由于我有更多字段,所以效率不高。

在hibernate中有没有其他方式将关联实体的列映射到关联实体字段?

有没有更好的数据库设计来解决这个问题?

+0

什么“的问题:”你想解决? –

+0

我不明白你为何得出它。如果Catalog的属性是只读的,那么派生它并使派生实体属性变为可变(这也意味着它可以被创建和删除)当然不是一个好主意。您是否注意到,当它从预先配置的Catalog中派生时,您无法创建新的BookCatalog。也许你不需要...但是你可以使用正常的继承。 –

回答

0

我相信你可以如下使用<component>

<class name="xxxx.BookCatalog" table="BOOK_CATALOG" mutable="false"> 
    <property name="c" type="string"> 
    <column name="C" /> 
    </property> 
    <component name = "xxxx.Catalog"> 
    <property name="a" type="string"> 
     <column name="A" /> 
    </property> 
    <property name="b" type="string"> 
     <column name="B" /> 
    </property> 
</component> 
</class>