Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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
Java Hibernate ProjectionList,用于从具有列值限制的表中获取计数_Java_Hibernate_Projection - Fatal编程技术网

Java Hibernate ProjectionList,用于从具有列值限制的表中获取计数

Java Hibernate ProjectionList,用于从具有列值限制的表中获取计数,java,hibernate,projection,Java,Hibernate,Projection,考虑上面的模型类(Books),其中其类别变量为A、B、C. 它存储在表“books”中,列名称为“book\u id”、“book\u name”、“category”(类别值为A、B或C) 使用Hibernate ProjectionList,我希望 class Books{ private int bookId; //primary key private String bookName; Private String category; } 将其分配给3个独立的

考虑上面的模型类(Books),其中其类别变量为A、B、C.

它存储在表“books”中,列名称为“book\u id”、“book\u name”、“category”(类别值为A、B或C)

使用Hibernate ProjectionList,我希望

class Books{
    private int bookId; //primary key
    private String bookName;
    Private String category;
}

将其分配给3个独立的int值countA、countB、countC,以显示执行此操作的方法之一,als链接与

Criteria cr=session.createCriteria(Book.class);
ProjectionList projList=Projections.ProjectionList();
projList.add(projects.groupProperty(“类别”));
项目列表添加(投影、计数(“类别”).as(“计数”);
cr.setProjection(项目列表);
列表行=cr.List();
如果(rows.size()>0){
对于(对象[]itr:行){
if(((字符串)itr[0]).trim()){
int countA=(长)itr[1];
}
if(((字符串)itr[0]).trim()){
int countB=(长)itr[1];
}
if(((字符串)itr[0]).trim()){
int countC=(长)itr[1];
}
}
}

可能重复@Michaeldibtes您的链接答案整个表的投影计数不带限制检查第二个答案。。。或者第三个,或者第四个,或者第五个…@Michaeldibets我在那里没有发现任何限制。对于我提出的问题,没有找到解决方案。如果您使用本机查询,并使用
GROUP BY
获取所有类别的总和,会怎么样?您的回答会给出总数。我想把它作为一个单独的计数@Michaeldibbetsa你真的期望被填鸭式喂养吗??这就是我所给予的全部帮助。为了基督的缘故,学习如何构建查询。我知道,看看我编辑过的答案,但这就像你阅读文档后看到的第一件事。。。在哪里查询、选择计数等,请在@MichaelDibbets下面找到我的答案
1.count of book_id(from DB table) with category value as A 
2.count of book_id(from DB table) with category value as B 
3.count of book_id(from DB table) with category value as C
Integer count = (Integer) session.CreateQuery("select count(*) from Books where category = ?1")
     .query.setParameter(1, "A")
     .uniqueResult();
                Criteria cr = session.createCriteria(Book.class);
                ProjectionList projList = Projections.projectionList();        
                projList.add(Projections.groupProperty("category"));
                projList.add(Projections.count("category").as("count"));
                cr.setProjection(projList);
                List<Object[]> rows = cr.list();
                if(rows.size()>0){
                    for(Object[] itr : rows){
                        if("A".equalsIgnoreCase(((String) itr[0]).trim())){
                            int countA = (long)itr[1];
                        }
                        if("B".equalsIgnoreCase(((String) itr[0]).trim())){
                            int countB = (long)itr[1];
                        }
                        if("C".equalsIgnoreCase(((String) itr[0]).trim())){
                            int countC = (long)itr[1];
                        }
                    }
                }