我有以下产品类别
productClass
productID
name
make
title
colors {1..*}.
我试图得到
productID
,colors
并且name
只有字段..
我的产品适用于单身attirbute
但colorList
未被检索。
最糟糕的是..当我有一个标准(restrictions.in)时,它说sql格式不正确..缺少属性y1_
一个很好的例子是
我正在尝试使用项目获得完整的费用付款,而他正试图在费用中获得一些领域
我有以下产品类别
productClass
productID
name
make
title
colors {1..*}.
我试图得到
productID
,colors
并且name
只有字段..
我的产品适用于单身attirbute
但colorList
未被检索。
最糟糕的是..当我有一个标准(restrictions.in)时,它说sql格式不正确..缺少属性y1_
一个很好的例子是
我正在尝试使用项目获得完整的费用付款,而他正试图在费用中获得一些领域
如果您想为任何颜色列表项目项目任何属性集,请考虑使用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);
如果我对您的理解正确,那么您可以将此类查询用于您的目的:
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 实体的结构以及您需要从中获取哪些字段,这就是为什么我发布了两个默认实体的示例:Category 和 Item(它们的关系在您的情况下是一对多的)。
您可以使用列表代替数组。例如,您可以通过以下方式在上面的示例中定义限制:
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()