0

我有以下产品类别

productClass
productID
name
make
title
colors {1..*}.

我试图得到

productID,colors并且name只有字段..

我的产品适用于单身attirbutecolorList未被检索。

最糟糕的是..当我有一个标准(restrictions.in)时,它说sql格式不正确..缺少属性y1_

一个很好的例子是

带有投影的休眠条件不执行 @OneToMany 映射的查询

我正在尝试使用项目获得完整的费用付款,而他正试图在费用中获得一些领域

4

2 回答 2

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

于 2012-08-08T05:27:38.130 回答
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 实体的结构以及您需要从中获取哪些字段,这就是为什么我发布了两个默认实体的示例: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()
于 2012-08-03T07:24:00.813 回答