我只需要從表格中獲取少量列值。所以我使用Projections來實現這一點。代碼起作用,但我認爲它不是有效的。休眠預測列表
我的問題是當我使用ProjectionsList &然後將criteria.list設置爲ArrayList - Bulletin對象爲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;
我只需要criteria.list設置爲BulletinList(類保存公報對象的列表)。但是當我使用投影時,Bulletin對象爲null。
我也讀到另一個線程使用
setResultTransformer(Transformers.aliasToBean
但不工作或者。那麼有人可以幫助解決如何使代碼更好。
由於
哈里什
非常感謝您的回覆。正如我所說我上面的代碼按預期工作,但只是想知道它是否有效。 Projections.property()以String作爲參數。當我嘗試使用您的代碼塊時,出現此錯誤: – Harry
類型不匹配:無法在(Object [] row:rows)行上從元素類型Object轉換爲Object []。我在這裏錯過了什麼?請讓知道。 – Harry
對不起哈里什,我原來的答案格式不正確,導致行的聲明錯誤。它應該像現在一樣工作。 – carbontax