我是冬眠的新手。如果有人可以對以下查詢發表評論,那將是非常好的:Hibernate - EhCache - 緩存關聯/集合/集合的哪個區域?
假設我有一個父類,並且每個父類有多個孩子。因此,父類的映射文件將是這樣的:
parent.hbm.xml
<hibernate-mapping >
<class name="org.demo.parent" table="parent" lazy="true">
<cache usage="read-write" region="org.demo.parent"/>
<id name="id" column="id" type="integer" length="10">
<generator class="native">
</generator>
</id>
<property name="name" column="name" type="string" length="50"/>
<set name="children" lazy="true">
<cache usage="read-write" region="org.demo.parent.children" />
<key column="parent_id"/>
<one-to-many class="org.demo.children"/>
</set>
</class>
</hibernate-mapping>
children.hbm.xml
<hibernate-mapping >
<class name="org.demo.children" table="children" lazy="true">
<cache usage="read-write" region="org.demo.children"/>
<id name="id" column="id" type="integer" length="10">
<generator class="native">
</generator>
</id>
<property name="name" column="name" type="string" length="50"/>
<many-to-one name="parent_id" column="parent_id" type="integer" length="10" not-null="true"/>
</class>
</hibernate-mapping>
所以對於一套兒童,應我們指定應該緩存關聯的區域org.demo.parent.children,或者我們是否應該使用org.demo.children的緩存區域來緩存子進程。
我使用EHCache作爲二級緩存提供程序。我試圖尋找這個問題的答案,但無法在這個方向找到任何答案。使用org.demo.children更有意義,但我不知道在哪種情況下,應該像上述情況那樣爲關聯/集合/集合使用單獨的緩存區域。請提供您的意見也讓我知道如果我不清楚我的問題。
謝謝大家。
感謝您的回覆。 「 」這很有道理,因爲您希望能夠使某個特定集合或某個區域中的所有集合無效而不會使集合類型中的所有實體無效。「 您是否打算在上述緩存配置中說爲兒童提供兩個不同的緩存區域是有利的。我不明白怎麼樣?善意地闡述。 一致性如何?如果其中一個區域(org.demo.parent.children)得到更新,則其他的子區域(org.demo.children)不會反映該更改。這不會造成不一致性 請澄清。 – user293297 2010-03-14 16:59:42
@lifeisnotfair我不確定能否幫到你。首先,你是否同意你可以通過添加/刪除元素來修改一個集合而不用修改元素本身?我在這裏看不到任何不一致的來源。其次,Hibernate爲你處理緩存/區域,所以你不必擔心它。這是使用默認值的另一個原因(特別是如果你是Hibernate的新手),而不是嘗試過早地(也可能是錯誤地)優化某些不成問題的東西。如果你想微調,稍後再做。 – 2010-03-15 00:23:31