多对多集合映射上的 Hibernate 数据过滤器
Hibernate data filter on many-to-many collection mapping
我有一个简单的设置
class Translation
string locale
enum property (NAME, DESCRIPTION)
string name
和
class SomeObject
string name
string description
set<Translation> translations;
工作正常,使用 hbm
将翻译映射为多对多
<set name="translations" table="someobjecttranslations" cascade="delete-orphan" lazy="false">
<cache usage="read-write" />
<key column="someobjectid" />
<many-to-many class="Translation" column="translationid" unique="true" />
</set>
由于翻译语言环境列表可能很大,我想在此集合上利用休眠数据过滤器,所以我添加了
<filter-def name="locale" condition=" locale = :locale ">
<filter-param name="locale" type="string" />
</filter-def>
定义过滤器,并添加到映射
<set name="translations" table="someobjecttranslations" cascade="delete-orphan" lazy="false">
<cache usage="read-write" />
<key column="someobjectid" />
<many-to-many class="Translation" column="translationid" unique="true" />
<filter name="locale" />
</set>
我以前做过类似的事情,但不是对多对多的集合,它一直工作正常,但是当我对一个集合这样做时,它似乎试图将语言环境与连接相匹配table,而不是翻译 table(这实际上是我想要的)。
数据过滤器是否真的适用于多对多集合,我应该如何设置它?
似乎 Hibernate 有两种数据过滤模式,过滤器和过滤器连接 table。
如果这样使用
<set name="translations" table="someobjecttranslations" cascade="delete-orphan" lazy="false">
<cache usage="read-write" />
<key column="someobjectid" />
<many-to-many class="Translation" column="translationid" unique="true" />
<filter name="locale" />
</set>
它在 join-table 上过滤,但是,如果这样使用:
<set name="translations" table="someobjecttranslations" cascade="delete-orphan" lazy="false">
<cache usage="read-write" />
<key column="someobjectid" />
<many-to-many class="Translation">
<column name="translationid" unique="true" />
<filter name="locale" condition=" locale = :locale "/>
</many-to-many>
</set>
它在反面(即翻译实体)进行过滤。我不得不在这里再次添加条件,不知道为什么,但它似乎不能与我已经拥有的其他 filter-def 一起使用。
我有一个简单的设置
class Translation
string locale
enum property (NAME, DESCRIPTION)
string name
和
class SomeObject
string name
string description
set<Translation> translations;
工作正常,使用 hbm
将翻译映射为多对多<set name="translations" table="someobjecttranslations" cascade="delete-orphan" lazy="false">
<cache usage="read-write" />
<key column="someobjectid" />
<many-to-many class="Translation" column="translationid" unique="true" />
</set>
由于翻译语言环境列表可能很大,我想在此集合上利用休眠数据过滤器,所以我添加了
<filter-def name="locale" condition=" locale = :locale ">
<filter-param name="locale" type="string" />
</filter-def>
定义过滤器,并添加到映射
<set name="translations" table="someobjecttranslations" cascade="delete-orphan" lazy="false">
<cache usage="read-write" />
<key column="someobjectid" />
<many-to-many class="Translation" column="translationid" unique="true" />
<filter name="locale" />
</set>
我以前做过类似的事情,但不是对多对多的集合,它一直工作正常,但是当我对一个集合这样做时,它似乎试图将语言环境与连接相匹配table,而不是翻译 table(这实际上是我想要的)。
数据过滤器是否真的适用于多对多集合,我应该如何设置它?
似乎 Hibernate 有两种数据过滤模式,过滤器和过滤器连接 table。
如果这样使用
<set name="translations" table="someobjecttranslations" cascade="delete-orphan" lazy="false">
<cache usage="read-write" />
<key column="someobjectid" />
<many-to-many class="Translation" column="translationid" unique="true" />
<filter name="locale" />
</set>
它在 join-table 上过滤,但是,如果这样使用:
<set name="translations" table="someobjecttranslations" cascade="delete-orphan" lazy="false">
<cache usage="read-write" />
<key column="someobjectid" />
<many-to-many class="Translation">
<column name="translationid" unique="true" />
<filter name="locale" condition=" locale = :locale "/>
</many-to-many>
</set>
它在反面(即翻译实体)进行过滤。我不得不在这里再次添加条件,不知道为什么,但它似乎不能与我已经拥有的其他 filter-def 一起使用。