質問のタイトルが示すように、いくつかのテーブル属性のみを照会する射影基準を作成しようとしています。
したがって、Person テーブル/クラスがあり、約 40 の属性があります。基準で属性の動的な数を取得する必要があります。たとえば、10、11、または 12 (SQL 用語select firstname, lastname from person
) とします。次のように実行していました。
Transaction tx = session.beginTransaction();
Criteria crit = session.createCriteria(Person.class);
crit.setCacheable(true);
ProjectionList projList = Projections.projectionList();
projList.add(Projections.property("id"));
Criterias c = null;
for (int i = 0; i < checked.size(); i++) {
Attribute attr = checked.elementAt(i);
switch (attr) {
case LASTNAME:
projList.add(Projections.property("lastName"));
c = enumMap.get(attr);
if (c.isChanged()) {
String tmp = (String) c.getAnswer();
tmp = tmp.replace('*', '%');
crit.add(Restrictions.like("lastName", tmp));
crit.addOrder(Order.asc("lastName"));
}
case ...THE REST .....
}
crit.setProjection(projList);
retList = crit.list();
tx.commit();
return retList;
retList
そして、要素が からのものではないことを返しますPerson.class
:
INFO [AWT-EventQueue-0] (UserGroupManagerApp.java127) - [Ljava.lang.Object;@14b9b80
FATAL [AWT-EventQueue-0] (Login.java78) - java.lang.ClassCastException: [Ljava.lang.Object; usergroupmanager.model.db.Person にキャストできません java.lang.ClassCastException: [Ljava.lang.Object; usergroupmanager.model.db.Person にキャストできません
助けてください。今のところ、40 以上の属性をすべてリストしていますが、クエリに時間がかかり、気に入りません。これを解決するのに役立つ代替ソリューションも探しています。私は読んだことResultTransformer
がありますが、私の場合はそれを使用する方法が見つかりませんでした。