Tôi muốn viết một phương thức trả về một danh sách các đối tượng được thêm cuối cùng được nhóm theo trường 'serviceId'.Viết mệnh đề HQL sử dụng Tiêu chí Hibernate API
Các HQL sau hoạt động, nhưng tôi muốn viết những dòng này sử dụng Tiêu chuẩn API:
FROM Notification WHERE date IN
(SELECT MAX(date) FROM Notification GROUP BY serviceId)
ORDER BY date ASC
Something như thế này:
Criteria crit = session.createCriteria(Notification.class);
crit.add(Restrictions.in("date", <MAX dates>));
criteria.addOrder(Order.desc("date"));
Cảm ơn trước.
EDIT:
Bây giờ tôi cần một truy vấn tương tự mà các công trình sử dụng EclipseLink API =/
Về cơ bản, tôi cần người cuối cùng N hàng (ngày max), mà trạng thái được một trong năm được mô tả dưới đây, được nhóm theo cột serviceId.
Do sự thiếu kinh nghiệm của tôi, nó là tốt nhất mà tôi có thể:
ExpressionBuilder builder = new ExpressionBuilder();
Expression exStatus1 = builder.get("status").equal(MessageType.START.toString());
Expression exStatus2 = builder.get("status").equal(MessageType.RUNNING.toString());
Expression exStatus3 = builder.get("status").equal(MessageType.PAUSED.toString());
Expression exStatus4 = builder.get("status").equal(MessageType.END_ERROR.toString());
Expression exStatus5 = builder.get("status").equal(MessageType.END_SUCCESS.toString());
ReadAllQuery query = new ReadAllQuery();
query.setReferenceClass(Notification.class);
query.setSelectionCriteria(((exStatus1).or(exStatus2).or(exStatus3).or(exStatus4).or(exStatus5)));
query.setMaxRows(listSize);
query.addDescendingOrdering("date");
Các khoản để tránh trùng lặp serviceIds trong dòng Kết quả là mất tích ...
Nhưng OP muốn truy vấn phụ là 'chọn tối đa (ngày) từ nhóm Thông báo theo serviceId', thay vì chỉ' chọn tối đa (ngày) từ Thông báo' –
Lỗi của tôi, được cập nhật. –
Hoạt động tốt! Cảm ơn. – elias