我有下面的代碼段,我想用回我的對象的集合:Hibernate的標準列表迭代
Session session = HibernateUtil.getSession();
List<MyObj> myObjList = (List<MyObj>)
session.createCriteria(MyObj.class)
.add(Restrictions.eq("searchField", searchField)).list();
Iterator<MyObj> myObjIt = myObjList.listIterator();
log.debug("list size: " + myObjList.size());
while(myObjIt.hasNext()){
MyObj myObj = myObjIt.next();
log.debug(myObj.getMyField());
}
然而,我的日誌保留打印相同的記錄多次的大小列表。如果我稍微重構,我的代碼可以像這樣正確地工作:
SQLQuery query = session.createSQLQuery(
"select my_field from my_table where search_field = :searchField"
);
query.setParameter("myField", myField);
List result = query.list();
for(Iterator iter = result.iterator(); iter.hasNext();){
Object[] row = (Object[]) iter.next();
log.debug(row[0]);
}
我在第一段代碼段中做錯了什麼?我應該可以採用這種方式,因爲我使用Hibernate,所以我寧願ORM按預期工作,所以我寧願使用前者而不使用後者。任何人有任何想法?
Fwiw,我正在使用Hibernate 3.5.4 final,Hibernate-validator 4.2.0 Final,hibernate-search 3.4.0 Final和hibername-c3p0 3.6.5 final,全部來自maven回購站。
編輯根據意見澄清。
不明白你期望'正確'的行爲。如果您查詢名稱='Joe'的每個對象;並返回100個對象。然後,如果你迭代他們並打印名字,你還希望看到什麼,但'喬'100次? – Affe
對不起。我澄清。我正在尋找一個會出現多次值的字段,並且正在尋找其他字段的值。當我模糊了我正在做的一些事情時,這會迷失方向。 – dmcnelis