Hibernate - EhCache - Какой регион кэшировать ассоциации / наборы / коллекции? - PullRequest
1 голос
/ 14 марта 2010

Я новичок в спящем режиме. Было бы здорово, если бы кто-то мог прокомментировать следующий мой запрос:

Скажем, у меня есть родительский класс, и у каждого родителя есть несколько детей. Таким образом, файл отображения родительского класса будет выглядеть примерно так:

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 в качестве провайдера кэша 2-го уровня. Я пытался найти ответ на этот вопрос, но не смог найти никакого ответа в этом направлении. Имеет больше смысла использовать org.demo.children, но я не знаю, в каких сценариях следует использовать отдельную область кэша для ассоциаций / наборов / коллекций, как в приведенном выше случае. Пожалуйста, предоставьте ваш вклад, также дайте мне знать, если я не ясно в моем вопросе.

Спасибо всем.

1 Ответ

2 голосов
/ 14 марта 2010

Таким образом, для заданных потомков мы должны указать область org.demo.parent.children, в которой должна кэшироваться ассоциация, или мы должны использовать область кэша org.demo.children, где дети будут кэшироваться. *

По умолчанию для необязательного region задано имя роли класса или коллекции. Таким образом, для set имя региона по умолчанию будет "org.demo.Parent.children" (т.е. отличается от имени региона по умолчанию для Child, которое будет "org.demo.Child"). Это имеет смысл IMO, так как вы хотите иметь возможность сделать недействительной определенную коллекцию или все коллекции в регионе без аннулирования всех сущностей из типа коллекции.

Но на самом деле, главный вопрос здесь: почему, черт возьми, вы не используете значения по умолчанию? Вы вводите дополнительную работу, обслуживание и потенциальные источники проблем, и я не понимаю преимущества. Как фанат соглашений о конфигурации, я использую значение по умолчанию (т.е. я не устанавливаю region).

...