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>

儿童.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 更有意义,但我不知道在哪种情况下应该使用单独的缓存区域进行关联/集合/集合,如上述情况。请提供您的意见,如果我的问题不清楚,请告诉我。

谢谢大家。

4

1 回答 1

2

因此,对于设置的孩子,我们应该指定应该缓存关联的区域 org.demo.parent.children 还是应该使用 org.demo.children 的缓存区域来缓存孩子。

默认情况下,可选region设置为类或集合角色名称。因此,对于set,默认区域名称将是"org.demo.Parent.children"(即不同于默认区域名称Childwhich 将是"org.demo.Child")。这是有道理的 IMO,因为您希望能够使特定集合或区域中的所有集合无效,而不会使集合类型中的所有实体无效。

但实际上,这里最大的问题是:你为什么不使用默认值?您正在引入额外的工作、维护和潜在的问题来源,而我无法理解这些好处。作为约定优于配置的粉丝,我使用默认设置(即我不设置region)。

于 2010-03-14T16:13:44.167 回答