5

FooEntityビューモデル Bean にカプセル化された、そのエンティティのプロパティによってグループ化された行数を取得するエンティティ Beanと DAO メソッドがありますFooCount

public List<FooCount> groupByFoo() {
    return sessionFactory.getCurrentSession()
        .createCriteria(FooEntity.class)
        .setProjection(Projections.projectionList()
            .add(Projections.groupProperty("foo"), "foo")
            .add(Projections.count("foo"), "count")
        ).setResultTransformer(Transformers.aliasToBean(FooCount.class))  
        .list();
}

public class FooCount {
    private String foo;
    private Integer count; // <-- this is the problem
    // getters/setters...
}

の代わりに がProjections.count()生成されるため、これを実行すると例外が発生します。LongInteger

org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of FooCount.count
    at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:119)
--snip--
    Caused by: java.lang.IllegalArgumentException: argument type mismatch

に変更countすると機能Longしますが、ビューモデルクラスは他のさまざまな場所で使用されるため、変更しないことをお勧めします。

何らかの形でProjections.count()return を作成する、結果トランスフォーマーを からに変換することはできますか?IntegerLongInteger

4

3 に答える 3

4

SQL プロジェクションを使用して整数にキャストできます。

.setProjection( Projections.sqlProjection(
    "Cast(Count(foo) as Integer) count",
    new String[]{"count"},
    new Type[]{StandardBasicTypes.INTEGER}
)
于 2013-05-23T22:58:41.557 に答える
1

属性のsetterメソッドで自分で変換できないの?

于 2013-05-23T14:03:31.193 に答える