Фильтр запросов гибернации при сборе - PullRequest
2 голосов
/ 20 декабря 2010

Я хочу выполнить следующий запрос:

from Item i where i.categoryItems.catalogId = :catId

Это, однако, приводит к следующему исключению: незаконная попытка разыменования коллекции. Так что я погуглил, нашел это сообщение на форуме Hibernate https://forum.hibernate.org/viewtopic.php?p=2349920, которое рекомендовало мнесделайте следующее:

from Item i, IN (i.categoryItems) WHERE i.catalogId = :catId

Этот вид работает, но есть проблема с этим: он возвращает мне массив Object с объектом Item и CategoryItem.Меня интересует только один объект Item (Список)

Мое отображение 'Item':

<hibernate-mapping package="be.xx.xx.xx.xx.domain" default-access="field">
  <class name="Item" table="ITEM">  
    <id name="articleId" column="article_id" type="long">
        <generator class="assigned" />
    </id>
...
...
        <set name="categoryItems" table="CATEGORY_ITEM">
            <key column="item_id" />
            <one-to-many class="be.xx.xx.xx.xx.domain.CategoryItem" />
    </set>
</class>
</hibernate-mapping>

У кого-нибудь есть идеи?

Спасибо

1 Ответ

3 голосов
/ 20 декабря 2010

Попробуйте:

SELECT i FROM Item i inner join i.categoryItems cat WHERE cat.id = :catID

Объяснение: Пробная навигация: i.categoryItems.catalogId работает только для отношений 1: 1 или n: 1, но не для 1: n.- Для 1: n вы должны использовать явное соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...