ここで、休止状態の基準の使用で問題に直面しています。複数のテーブルの基準を作成し、制限を追加しましたが、出力が期待どおりではありません
私のコード:
final Criteria crit = session2.createCriteria(Item.class, "item");
crit.createCriteria("itemvalues", "values");
crit.createCriteria("categoryitemses", "catItems");
crit.createCriteria("catItems.category", "cat");
crit.createCriteria("cat.categorytype", "catType");
crit.createCriteria("cat.categoryproducts", "catProd");
crit.createCriteria("catProd.product", "prod");
crit.createCriteria("prod.customer", "cust");
crit.add(Restrictions.eq("catType.id", id));
crit.add(Restrictions.eq("cust.id", custId));
crit.add(Restrictions.eq("values.inputkey", "previewimage"));
crit.addOrder(Order.asc("item.id"));
Item.java には、次のプロパティがあります。
private Itemtype itemtype;
private String name;
private String description;
private Set<Itemvalue> itemvalues = new HashSet<Itemvalue>(0);
private Set<Categoryitems> categoryitemses = new HashSet<Categoryitems>(0);
ItemValue テーブルには、previewimage や content などのエントリを含むフィールド名 inputkey が含まれていますが、必要なのは previewimage inputkeys を取得することだけです。
しかし、出力 inputkeys には他の値も含まれています。
休止状態によって生成されたクエリが正しく実行され、期待どおりの出力が得られることがわかりましたが、その後、セットを使用して itemvalue を取得すると、他のいくつかのクエリも実行されます。
final Set<Itemvalue> itemValues = itemList.get(innerIndex).getItemvalues();
final Iterator<Itemvalue> itemVals = itemValues.iterator();
while(itemVals.hasNext()) {
jobj.put("Location", itemVals.next().getValue());
}
ここで itemValues.iterator の hibernate クエリは 17 回実行されました。これは、全体の出力が 17 アイテムであり、各アイテムが itemvalue をフェッチするが、前に指定された条件が省略されているためです。
crit.add(Restrictions.eq("values.inputkey", "previewimage"));
ここで何が欠けていますか?誰でもこれを解決するのを手伝ってください!
前もってありがとう、
カーティ。