关于java:Hibernate查询过滤器上的集合

Hibernate query filter on collection

我要执行以下查询:

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

但是会产生以下异常:非法尝试取消引用集合
所以我用Google搜索了一下,发现了这个Hibernate论坛帖子https://forum.hibernate.org/viewtopic.php?p=2349920,建议我执行以下操作:

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

这种作品,但是有一个问题:
它返回一个带有Item对象和CategoryItem对象的Object数组。我只对单个Item对象(列表)

感兴趣

我对"商品"的映射:

1
2
3
4
5
6
7
8
9
10
11
12
13
<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
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,您必须使用显式联接操作。