Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
hibernate distinct子句不起作用_Hibernate - Fatal编程技术网

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();