2012-01-14 2 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

Вы уверены, что у вас нет Аляски несколько раз в этом столе с несколькими идентификаторами? –

+0

Строка «crit.setResultTransformer (Criteria.DISTINCT_ROOT_ENTITY)» неверна. Это говорит Hibernate, чтобы предоставить вам список всех StatesProvinces с уникальным идентификатором. Вам нужен список с уникальными именами. Измените код createCriteria на следующий: session.createCriteria (StatesProvinces.class) .setProjection (Projections.distinct (Projections.projectionList(). Add (Projections.property («name»), «name»))) .setResultTransformer (Transformers.aliasToBean (StatesProvinces.class)) .list(); –

ответ

0

код ниже даст список ЕД уникальных состояний:

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

Недостатком спящем окрености является, мы должны использовать его только с прогнозами и в случае, если мы хотим, чтобы все лица, мы должны добавить проекцию ко всем полям и использовать setReusultTransformer, как показано ниже:

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

Смежные вопросы