2012-01-14 115 views
0

我有這個代碼的不同條款休眠不工作

StatesProvinces statesProvinces = new StatesProvinces(); 
ArrayList<StatesProvinces> allStates = new ArrayList<StatesProvinces>(); 
ArrayList<String> states = new ArrayList<String>(); 
Session session = sessionFactory.openSession(); 

Criteria crit = session.createCriteria(StatesProvinces.class); 
crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 

List rsList = crit.list(); 
for (Iterator it = rsList.iterator(); it.hasNext();) { 
    statesProvinces = (StatesProvinces) it.next(); 
    allStates.add(statesProvinces); 
    String state = statesProvinces.getState(); 
    states.add(state); 
} 
return states; 

我得到的結果都如阿拉斯加8次,其中應該只有1次對此,我上面用不同的相同的狀態,但其不工作..我錯了嗎?

感謝

+1

你確定你在這個表中沒有多次阿拉斯加,有幾個ID? – 2012-01-14 09:48:05

+0

「crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)」行是錯誤的。這就告訴Hibernate給你一個帶有唯一ID的所有StatesProvinces列表。你想要一個具有唯一名稱的列表。將您的createCriteria代碼更改爲以下內容:session.createCriteria(StatesProvinces.class).setProjection(Projections.distinct(Projections.projectionList()。add(Projections.property(「name」),「name」))) .setResultTransformer( Transformers.aliasToBean(StatesProvinces.class)) .list(); – 2012-01-16 02:26:13

回答

0

下面的代碼會給獨特的狀態u的名單:

 Criteria criteria = getHibernateSession().createCriteria(StatesProvinces.class); 
     ProjectionList projectionList = Projections.projectionList() 
       .add(Projections.property("state")); 
     criteria.setProjection(Projections.distinct(projectionList)); 
     list = criteria.list(); 

休眠DISTICT的缺點是,我們必須只與預測和情況下,我們希望整個實體使用它,我們必須添加投影到所有字段並使用setReusultTransformer,如下所示:

criteria.setResultTransformer(Transformers.aliasToBean(StatesProvinces.class));