【发布时间】:2012-08-08 12:19:52
【问题描述】:
这里我遇到了休眠条件使用的问题,我为多个表创建了条件并添加了限制,但输出不符合预期
我的代码:
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 表包含一个字段名称 inputkey,其中包含 previewimage 和 content 等条目,但我只需要检索 previewimage 输入键。
但在输出中 inputkeys 还带有一些其他值。
我发现 hibernate 生成的查询运行正常并按预期提供输出,但在查询之后,当我使用 set 检索 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"));
我在这里缺少什么?任何人请帮我解决这个问题!
提前致谢,
卡西。
【问题讨论】:
标签: hibernate hibernate-mapping