我有以下产品类
productClass
productID
name
make
title
colors {1..*}.
我想要
仅 productID
,colors
和name
字段..
我的产品适用于单attirbute
但colorList
未被检索。
最糟糕的是..当我有一个标准(restrictions.in)时,它说sql表格不正确..缺少属性y1 _
一个很好的例子是
Hibernate criteria with projection not performing query for @OneToMany mapping
我正在尝试使用项目来支付费用完整的付款,否则他试图在费用中获得一些字段
答案 0 :(得分:1)
如果您想为任何颜色列表项目投影任何属性集,请考虑使用http://github.com/moesio/seimos这里是一个示例:
例如,您可以使用以下标准:
Criteria criteria = session.createCriteria(Cat.class);
criteria.add(Restrictions.like(“description”, “Pap”)
.addOrder(Order.asc(“description”);
Criteria subCriteria = criteria.createCriteria("kind", "kind");
subCriteria.add(Restrictions.eq("description", "persa"));
Criteria anotherSubCriteria = subCriteria.createCriteria("anAssociation","anAssociation");
anotherSubCriteria.add(Restrictions.eq("attribute", "anything"));
criteria.setResultTransformer(new AliasToBeanResultTransformer(Cat.class));
criteria.crateAlias(“kind.anAssociation”, “kind_anAssociation”);
criteria.setProjection(Projections.projectionList()
.add(Projections.alias(Projections.property(“id”), “id”))
.add(Projections.alias(Projections.property(“kind.id”, “kind.id”))
.add(Projections.alias(Projections.property(“kind.anAssocation.attribute”, “kind.anAssociation.attribute”))
List cats = criteria.list();
但是如果你想保存一些代码,你可以使用Seimos和代码
Filters filters = new Filters();
filters.add(new Filters(“description”, “Pap”)
.add(new Filter(“description”))
.add(new Filter("kind.description", "persa"))
.add(new Filter("kind.anAssociation.attribute", "anything"));
List<Cat> cats = dao.find(filters);
因此,请考虑使用http://github.com/moesio/seimos
答案 1 :(得分:0)
如果我理解正确,那么您可以将此类查询用于您的目的:
List<Object[]> results = sess.createCriteria(Category.class, "category")
.add(Restrictions.in("category.name", new String[]{"Test1", "Test2"}))
.createAlias("items", "item")
.setProjection(Projections.projectionList()
.add(Projections.property("category.id"), "categoryId")
.add(Projections.property("category.name"), "categoryName")
.add(Projections.property("item.name"))
.add(Projections.property("item.initialPrice")))
.list();
它将返回表示结果每一行的Object []数组列表。
我不知道您的Color实体的结构以及您需要哪些字段,这就是我为两个默认实体发布示例的原因:类别和项目(他们的关系是一对多的,如您的情况)。
您可以使用List代替数组。例如,您可以通过以下方式在上面的示例中定义重新定义:
List<String> inRestrictions = new ArrayList<String>();
inRestrictions.add("Test1");
inRestrictions.add("Test2");
...
.add(Restrictions.in("category.name", inRestrictions))
...
修改强>
如果您需要带有颜色列表的Product对象,则只获取它。如果你定义了正确的映射,那么将使用它(懒惰或急切地)获取颜色列表。
List<Product> results = sess.createCriteria(Product.class)
.add(Restrictions.in("... necessary restrictions")
.list()