Java Hibernate ProjectionList,用于从具有列值限制的表中获取计数
考虑上面的模型类(Books),其中其类别变量为A、B、C. 它存储在表“books”中,列名称为“book\u id”、“book\u name”、“category”(类别值为A、B或C) 使用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个独立的
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];
}
}
}