【问题标题】:Hibernate data filter on many-to-many collection mapping多对多集合映射上的休眠数据过滤器
【发布时间】:2016-05-10 12:48:08
【问题描述】:

我有一个简单的设置

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>

我之前做过类似的事情,但不是多对多集合,它一直工作正常,但是当我对集合执行此操作时,它似乎试图将语言环境与连接表匹配,而不是翻译表(这实际上是我想要的)。

数据过滤器是否真的适用于多对多集合,我应该如何设置它?

【问题讨论】:

    标签: hibernate hibernate-mapping


    【解决方案1】:

    好像Hibernate有两种数据过滤模式,filter和filter 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="translationid" unique="true" />
      <filter name="locale" />
    </set>
    

    它在连接表上进行过滤,但是,它是这样使用的:

    <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 一起使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-07
      • 2011-04-07
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多