2012-01-14 175 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));