Tôi cần tạo truy vấn và tôi cần COUNT(*)
và HAVING COUNT(*) = x
.CÁCH SỬ DỤNG CÓ COUNT (*) với hibernate
Tôi đang sử dụng một tác phẩm xung quanh sử dụng lớp CustomProjection
mà tôi đã tải xuống ở đâu đó.
Đây là SQL mà tôi cố gắng để đạt được:
select count(*) as y0_, this_.ensayo_id as y1_ from Repeticiones this_
inner join Lineas linea1_ on this_.linea_id=linea1_.id
where this_.pesoKGHA>0.0 and this_.nroRepeticion=1 and linea1_.id in (18,24)
group by this_.ensayo_id
having count(*) = 2
Đây là mã, nơi tôi sử dụng lớp Projection
Hibernate:
critRepeticion.setProjection(Projections.projectionList()
.add(Projections.groupProperty("ensayo"))
.add(CustomProjections.groupByHaving("ensayo_id",Hibernate.LONG,"COUNT(ensayo_id) = "+String.valueOf(lineas.size()))
.add(Projections.rowCount())
);
Lỗi này là:
!STACK 0
java.lang.NullPointerException
at org.hibernate.criterion.ProjectionList.toSqlString(ProjectionList.java:50)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getSelect(CriteriaQueryTranslator.java:310)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:71)
at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:67)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1550)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
at ar.com.cse.cseagro.controller.RepeticionController.buscarEnsayo(RepeticionController.java:101)
Nếu tôi nhận xét dòng có lớp là CustomProjections
, công việc truy vấn, nhưng tôi không nhận được bộ lọc HAVING COUNT(*)
trong SQL ...
Về cơ bản truy vấn cố gắng truy xuất, trong lược đồ chi tiết chính, tất cả bản ghi chủ nơi danh sách chi tiết đồng thời hiện tại, như nếu bạn muốn biết cả hai sản phẩm, A và B ".
Đó là lý do tại sao nếu tôi có 3 mục trong mệnh đề IN
, tôi cần sử dụng mệnh đề HAVING COUNT = 3
.
Bất kỳ ý tưởng hoặc đề xuất nào? Trân trọng,
Xin lỗi, tôi đã tìm ra vấn đề. Tôi thay thế lớp CusotmProjections, với: .add (Projections.sqlGroupProjection ("ensayo_id", groupBy, bí danh, loại)), trong đó groupBy, bí danh và loại là: \t \t \t Chuỗi nhómBy = "ensayo_id" + "có" + "đếm (*) =" + String.valueOf (lineas. kích thước()); \t \t \t Chuỗi [] alias = new String [1]; \t \t \t bí danh [0] = "ensayo_id"; \t \t \t Nhập [] types = new Type [1]; \t \t \t loại [0] = Hibernate.INTEGER; và phép thuật nằm trên chuỗi nhóm. – Nicolas400