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()
生成されるため、これを実行すると例外が発生します。Long
Integer
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 を作成するか、結果トランスフォーマーを からに変換することはできますか?Integer
Long
Integer