1

冬眠初心者です。誰かが私が持っている次のクエリについてコメントできれば素晴らしいと思います:

親クラスがあり、各親には複数の子がいるとします。したがって、親クラスのマッピング ファイルは次のようになります。

親.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 のキャッシュ領域を使用する必要があります。

第 2 レベルのキャッシュ プロバイダーとして EHCache を使用しています。この質問に対する答えを探してみましたが、この方向の答えは見つかりませんでした。org.demo.children を使用する方が理にかなっていますが、上記の場合のように、どのシナリオでアソシエーション/セット/コレクションに個別のキャッシュ領域を使用する必要があるかわかりません。また、私の質問が明確でない場合はお知らせください。

皆さんありがとう。

4

1 に答える 1

2

したがって、セットの子に対して、関連付けをキャッシュする領域 org.demo.parent.children を指定するか、子がキャッシュされる org.demo.children のキャッシュ領域を使用する必要があります。

デフォルトでは、optionalregionはクラスまたはコレクションのロール名に設定されています。したがって、 のset場合、デフォルトのリージョン名は になります"org.demo.Parent.children"(つまり、 のデフォルトのリージョン名とは異なりChildます"org.demo.Child")。コレクションのタイプからすべてのエンティティを無効にすることなく、特定のコレクションまたはリージョン内のすべてのコレクションを無効にできるようにする必要があるため、これは IMO にとって理にかなっています。

しかし実際には、ここでの大きな問題は、なぜデフォルトを使用しないのかということです。あなたは余分な作業、メンテナンス、および潜在的な問題の原因を導入していますが、私はその利点を理解できません。設定よりも規則が好きなので、私はデフォルトを使用します (つまり、設定しませんregion)。

于 2010-03-14T16:13:44.167 に答える