2012-09-24 125 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>