Как использовать подвыбор HQL в условии фильтра Hibernate?

Я хочу использовать фильтры Hibernate для фильтрации объектов «MyEntity», используя suselect «AnotherEntity» в условии фильтрации. Конфигурация выглядит примерно так:

<hibernate-mapping>

  <filter-def name="myFilter" condition="someProperty in (select x.property1 from AnotherEntity x where property2 = :property2)">
    <filter-param name="property2" type="long"/>
  </filter-def>

  <class name="com.example.MyEntity" table="SOME_TABLE">
    <id name="OID" column="O_ID" type="long">
      <generator class="hilo">
        <param name="table">oid_id</param>
        <param name="column">next_id</param>
      </generator>
    </id>
    <version name="hibernateVersion" column="hibernate_version" unsaved-value="negative"/>
    <property name="someProperty"/>
    <filter name="myFilter"/>
  </class>

  <class name="com.example.AnotherEntity" table="ANOTHER_TABLE">
    <composite-id>
      <key-many-to-one name="property1" ... />
      <key-many-to-one name="property2" ... />
    </composite-id>
  </class>

</hibernate-mapping>

Что дает мне org.hibernate.exception.SQLGrammarException: не удалось выполнить запрос , соответственно SQLException Таблица «ANOTHERENTITY» не найдена , поскольку сгенерированный оператор SQL содержит «AnotherEntity» вместо сопоставленной таблицы «ANOTHER_TABLE», как если бы сопоставление не было найдено. Однако когда я просто выполняю подзапрос

select x.property1 from AnotherEntity x where property2 = :property2

, он работает нормально.

Чего я здесь скучаю? Моя конфигурация неверна? Могу ли я использовать Suselect HQL в фильтрах?

5
задан Tim Büthe 25 July 2011 в 10:35
поделиться