我想执行以下查询:
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
这种作品,但这有一个问题: 它返回一个带有Item对象和CategoryItem对象的Object数组。我只对单个Item对象(List)感兴趣
我对'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>
有人有任何想法吗?
由于
答案 0 :(得分:3)
尝试:
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,您必须使用明确的连接操作。