Мне нужно было получить только несколько значений столбца из таблицы. Поэтому я использовал Projections для достижения этой цели. Код работает, но я не думаю, что он эффективен.
Моя проблема возникла, когда я использовал ProjectionsList, а затем задал критерии.list для ArrayList — объект бюллетеня имеет значение null. Я не уверен, как объяснить это лучше. Итак, я приведу код, а затем, пожалуйста, прочитайте ниже:
List<Bulletin> list = new ArrayList<Bulletin>();
BulletinList bulletinList = null;
Criteria criteria = null;
criteria = this.getSession().createCriteria(Bulletin.class)
.setProjection(Projections.projectionList()
.add(Projections.property(bulletinIdAttr))
.add(Projections.property(docNameAttr))
.add(Projections.property(docTypeCodeAttr))
);
criteria.addOrder(Order.desc(createdTimeAttr));
List<Object> rows = criteria.list();
for (Object r : rows) {
Object[] row = (Object[]) r;
Bulletin bull = new Bulletin();
bull.setBulletinId((Long) row[0]);
bull.setDocumentName((String) row[1]);
bull.setDocumentTypeCode((String) row[2]);
list.add(bull);
}
bulletinList = new BulletinList();
bulletinList.setBulletins(list);
return bulletinList;
Мне просто нужно установить для критерия.list значение BulletinList (класс, который содержит список объектов Bulletin). Но когда я использую проекции, объект бюллетеня имеет значение null.
Я также читал другую ветку для использования
setResultTransformer(Transformers.aliasToBean
, но она тоже не работает. Так может кто-нибудь помочь в этом, как сделать код лучше.
Спасибо
Хариш