Hibernate Projections List

criteria, hibernate, projection

Solution

- `Projections.property()` takes a String as an argument. In the code you provided the value of that String should be the name of a member of the Bulletin class. Presumably `bulletinIdAttr`, for example, is a String with such a value otherwise you would be getting runtime errors.

When you call `setProjection` on a Criteria instance you are implicitly setting the ResultTransformer to `PROJECTIONS` and this is what you want. No need to call `setResultTransformer` yourself. I would simplify the routine a little like this

List<Object[]> rows = criteria.list();
for (Object[] row : rows) {
   Bulletin bull = new Bulletin();
   bull.setBulletinId((Long) row[0]);
   bull.setDocumentName((String) row[1]);
   bull.setDocumentTypeCode((String) row[2]);
   list.add(bull);
}

But that shouldn't make any difference to your results. Have you checked that `rows` is empty?

Problem

I ned to get only a few column values from the table. So I have used Projections to achieve this. The code works, but I don't think it is effective. My issue was when I used ProjectionsList & then set the criteria.list to an ArrayList - the Bulletin object is null. I'm not sure how to explain this better. So I will put the code and then please read below: ``` 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; ``` I just need to set criteria.list to BulletinList (Class that holds a list of Bulletin objects). But when I use projections, Bulletin object is null. I also was reading another thread to use ``` setResultTransformer(Transformers.aliasToBean ``` But that ain't working either. So can someone help in this on how to make the code better. Thanks Harish

Original source