Как следует из заголовка вопроса, я пытаюсь составить критерий проекции, запрашивая только пару атрибутов таблицы.
Итак, у меня есть таблица / класс 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
, но не нашел, как использовать его в моем случае.