2

给定一张桌子,说:

orderId | typeId
----------------
1       | 1
2       | 1
3       | 2
4       | 5
5       | 1
6       | 2

我有一个Order对象,它有一个Type对象 (在另一个方向Type有一个Setof Orders 。

我将如何使用 Hibernate 的 Criteria API检索最流行Type的(在本例中为类型 1)?Order

4

2 回答 2

2

我看了一下 Hibernate Criteria API 的文档,你能做这样的事情吗:

List results = session.createCriteria(Order.class)
    .setProjection( Projections.projectionList()
        .add( Projections.rowCount(),"rCount")
        .add( Projections.groupProperty("typeId") )
    )
    .addOrder(Order.desc("rCount") )
    .setMaxResults(1)
    .list();

这可能需要修改以使用正确的类

于 2011-05-14T12:16:14.490 回答
1

你可能想看看Projections。您应该能够在“类型”关联上使用Projections.groupProperty(),并将结果相加。检查这个 SO 问题:休眠条件中的表达式

编辑:尝试过,以下似乎工作正常:

命令:

@Entity
@Table(name="orders")
public class Order {
    @Id
    @GeneratedValue
    private long id;
    @ManyToOne
    private Type type;
}

类型:

@Entity
@Table(name="order_types")
public class Type {
    @Id
    @GeneratedValue
    private long id;
}

和标准:

    Criteria c=sess.createCriteria(Order.class)
        .createCriteria("type")
        .setProjection(
                Projections.projectionList()
                .add(Projections.groupProperty("id"))
                .add(Projections.rowCount(),"rowcount")
        )
        .addOrder(org.hibernate.criterion.Order.desc("rowcount"));

    for (Object[] result:(List<Object[]>) c.list()){
        System.out.println("type id: " + result[0] + "\tcount: " + result[1]);
    }
于 2011-05-14T12:10:56.243 回答