Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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

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
Spring top";";使用hibernate条件的每个组中的行_Spring_Hibernate_Hibernate Criteria - Fatal编程技术网

Spring top";";使用hibernate条件的每个组中的行

Spring top";";使用hibernate条件的每个组中的行,spring,hibernate,hibernate-criteria,Spring,Hibernate,Hibernate Criteria,使用Hibernate标准/投影,每组中的上/下/随机“N”行 如何检索每个子主题的前5个问题 DetachedCriteria criteria = DetachedCriteria.forClass(Question.class); ProjectionList projList = Projections.projectionList(); projList.add(Projections.property("questionId")); projList.

使用Hibernate标准/投影,每组中的上/下/随机“N”行

如何检索每个子主题的前5个问题

    DetachedCriteria criteria = DetachedCriteria.forClass(Question.class);
    ProjectionList projList = Projections.projectionList();
    projList.add(Projections.property("questionId"));
    projList.add(Projections.groupProperty("subTopicId"));
    criteria.setProjection(projList);
    List<Object> resultList = (List<Object>) getHibernateTemplate().findByCriteria(criteria);
    Iterator<Object> itr = resultList.iterator();
    List<Integer> questionIdList = new ArrayList<Integer>();
    while(itr.hasNext()){
        Object ob[] = (Object[])itr.next();
        System.out.println(ob[0]+"  --  "+ob[1]);
    }
DetachedCriteria=DetachedCriteria.forClass(Question.class);
ProjectionList projList=Projections.ProjectionList();
projList.add(Projections.property(“questionId”);
projList.add(projects.groupProperty(“subTopicId”);
标准。设置投影(项目列表);
列表结果列表=(列表)getHibernateTemplate().findByCriteria(标准);
迭代器itr=resultList.Iterator();
List questionIdList=新建ArrayList();
while(itr.hasNext()){
对象ob[]=(对象[])itr.next();
System.out.println(ob[0]+“--”+ob[1]);
}
我使用下面的代码临时获得结果,Hibernate是否有使用Criteria API/任何其他替代方法获得结果的解决方案

   Set<Integer> getQuestionsBySubTopicWithLimit(Set<Integer> questionIdsSet, Integer subjectId, Integer limit, Integer status) {
   DetachedCriteria criteria = DetachedCriteria.forClass(Question.class);
    if(subjectId!=null && subjectId!=0){
        criteria.add(Restrictions.eq("subjectId", subjectId));
    }
    if(status!=null){
        criteria.add(Restrictions.eq("status", status));
    }
    if(questionIdsSet!=null && !questionIdsSet.isEmpty()){
        criteria.add(Restrictions.not(Restrictions.in("questionId", questionIdsSet)));
    }
    ProjectionList projList = Projections.projectionList();
    projList.add(Projections.property("questionId"));
    projList.add(Projections.property("subTopicId"));
    criteria.add(Restrictions.sqlRestriction("1=1 order by sub_topic_id, rand()"));
    criteria.setProjection(projList);
    List<Object> resultList = (List<Object>) getHibernateTemplate().findByCriteria(criteria);
    Iterator<Object> itr = resultList.iterator();
    Set<Integer> tmpQuestionIdsSet = new HashSet<Integer>();
    Integer subTopicId = 0, tmpSubTopicId = 0;
    Integer count = 0;
    while(itr.hasNext()){
        Object ob[] = (Object[])itr.next();
        if(count==0){
            subTopicId = (Integer) ob[1];
        }
        tmpSubTopicId = (Integer) ob[1];
        if(tmpSubTopicId!=subTopicId){
            subTopicId = tmpSubTopicId;
            count = 0;
        }
        count++;
        if(count<=limit){
            tmpQuestionIdsSet.add((Integer) ob[0]);
        }
    }
    return tmpQuestionIdsSet;
    }
Set-getQuestionsBySubTopicWithLimit(设置QuestionIDSet、整数主体、整数限制、整数状态){
DetachedCriteria=DetachedCriteria.forClass(问题.class);
if(subjectId!=null&&subjectId!=0){
标准。添加(限制。情商(“主体”,主体));
}
如果(状态!=null){
标准。添加(限制。情商(“状态”),状态);
}
if(questionIdsSet!=null&&!questionIdsSet.isEmpty()){
添加(Restrictions.not(Restrictions.in(“questionId”,questionIdsSet)));
}
ProjectionList projList=Projections.ProjectionList();
projList.add(Projections.property(“questionId”);
projList.add(projects.property(“subTopicId”);
criteria.add(Restrictions.sqlRestriction(“1=1按子主题id排序,rand()”));
标准。设置投影(项目列表);
列表结果列表=(列表)getHibernateTemplate().findByCriteria(标准);
迭代器itr=resultList.Iterator();
Set tmpQuestionIdsSet=new HashSet();
整数子主题ID=0,tmpSubTopicId=0;
整数计数=0;
while(itr.hasNext()){
对象ob[]=(对象[])itr.next();
如果(计数=0){
subTopicId=(整数)ob[1];
}
tmpSubTopicId=(整数)ob[1];
if(tmpSubTopicId!=子主题ID){
subTopicId=tmpSubTopicId;
计数=0;
}
计数++;
如果(计算)