2

テーブルが与えられた場合、次のように言います。

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

そして、私はOrderオブジェクトを持っているオブジェクトを持っていTypeます (Typeは反対方向Setにs を持っています.Order

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 の質問を確認してください: Expressions in hibernate criteria

編集:試してみましたが、以下はうまくいくようです:

注文:

@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 に答える