集合上的休眠查询过滤器

Bar*_*den 2 java mysql hibernate hql

我想执行以下查询:

from Item i where i.categoryItems.catalogId = :catId
Run Code Online (Sandbox Code Playgroud)

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

from Item i, IN (i.categoryItems) WHERE i.catalogId = :catId
Run Code Online (Sandbox Code Playgroud)

这种工作,但有一个问题:它返回给我一个带有 Item 对象和 CategoryItem 对象的 Object 数组。我只对单个 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>
Run Code Online (Sandbox Code Playgroud)

有人有任何想法吗?

谢谢

Ral*_*lph 5

尝试:

SELECT i FROM Item i inner join i.categoryItems cat WHERE cat.id = :catID
Run Code Online (Sandbox Code Playgroud)

说明:您尝试过的导航:i.categoryItems.catalogId仅适用于 1:1 或 n:1 关系,但不适用于 1:n。-- 对于 1:n,您必须使用显式连接操作。