ItemとItemCategoryの間に多対多の関係があります。アイテムについては、アイテムが入っていないカテゴリを知りたいと思っています。また、カテゴリにはアイテムがないItemCategoryも知りたいと思っています。私は、アドホッククエリの一部としてこれを含めていますので、私はDetachedCriteriaをを使用していHibernate多対多:クラスBを含まないすべてのクラスAを検索するための基準
SELECT item
FROM Item AS item
WHERE item.id NOT IN (SELECT item2.id FROM Item AS item2 LEFT JOIN item2.categories AS cat WHERE cat.id = ?)
:秒1のためのSQLは次のようなものでなければなりません。私は解決策に近いと思いますが、Hibernateが正しい解決策を生成していないようです。私のコードは、このしています( "item_categories" と呼ばれる)、それは、結合テーブルを欠けていることを
select ...
from wine.categories this_
where this_.CATEGORY_ID not in
(select this0__.CATEGORY_ID as y0_
from wine.categories this0__
where item1_.INVENTORY_ITEM_ID=?)
注:
DetachedCriteria subquery = DetachedCriteria.forClass(Item.class, "item");
DetachedCriteria catSubquery = subquery.createCriteria("categories", "cat");
SimpleExpression criterion = Restrictions.eq("id", value);
catSubquery.add(criterion);
criteria.add(Subqueries.propertyNotIn("id", subquery));
生成されたSQLは、次のようになります。これをどうやって解決するのですか?
詳細情報:ここでは "ItemCategory.items"
<set name="items" table="item_categories" lazy="true" inverse="true"
cascade="none" sort="unsorted">
<cache usage="nonstrict-read-write"/>
<key column="ITEM_CATEGORY_ID">
</key>
<many-to-many class="com.dr_dee_sw.wine.dto.Item" column="ITEM_ID"
outer-join="auto"/>
</set>
これは、私が持っていた1つのエラーを修正するようですが、それでもまだ結合テーブルを指定していません。サブクエリは現在、「this0__カテゴリCATEGORY_ID =?」というカテゴリからy0_として別個のitem1_.ITEM_IDを選択しています。 –
はマッピングエラーのようです。カテゴリのマッピングを投稿できますか?どこから 'item1_'を取得しますか? – Firo
item1_は、デバッグしようとすると別のエイリアスを試してきました。 –