hibernate distinct子句不起作用
我有这个密码hibernate distinct子句不起作用,hibernate,Hibernate,我有这个密码 StatesProvinces statesProvinces = new StatesProvinces(); ArrayList<StatesProvinces> allStates = new ArrayList<StatesProvinces>(); ArrayList<String> states = new ArrayList<String>(); Session session = sessionFactory.open
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;
statesprovisions statesprovisions=newstatesprovisions();
ArrayList AllState=新的ArrayList();
ArrayList states=新的ArrayList();
Session Session=sessionFactory.openSession();
Criteria crit=session.createCriteria(statesProvisions.class);
crit.setResultTransformer(Criteria.DISTINCT\u ROOT\u实体);
List rsList=crit.List();
for(Iterator it=rsList.Iterator();it.hasNext();){
statesProvisions=(statesProvisions)it.next();
所有州。添加(州规定);
字符串状态=statesProvisions.getState();
添加(州);
}
返回状态;
我得到的结果是相同的状态,例如阿拉斯加8次,我使用上面的distinct时应该只有1次,但它不起作用。我错在哪里
谢谢以下代码将为您提供唯一状态列表:
Criteria criteria = getHibernateSession().createCriteria(StatesProvinces.class);
ProjectionList projectionList = Projections.projectionList()
.add(Projections.property("state"));
criteria.setProjection(Projections.distinct(projectionList));
list = criteria.list();
hibernate distict的缺点是我们只能将其用于投影,如果我们需要整个实体,我们必须将投影添加到所有字段,并使用setReusultTransformer,如下所示:
标准.setResultTransformer(Transformers.aliasToBean(StatesProvisions.class)) 是否确定此表中没有多次使用多个ID?行“crit.setResultTransformer(Criteria.DISTINCT\u ROOT\u ENTITY)”是错误的。这会告诉Hibernate返回一个具有唯一ID的所有状态选项的列表。您需要一个具有唯一名称的列表。将createCriteria代码更改为以下代码:session.createCriteria(statesProvisions.class).setProjection(Projections.distinct(Projections.projectionList().add(Projections.property(“name”),“name”))).setResultTransformer(Transformers.aliasToBean(statesProvisions.class)).list();