Bạn có thể sử dụng phiên # createFilter đó là một hình thức của HQL đó một cách rõ ràng hoạt động trên các bộ sưu tập. Ví dụ, bạn đề cập đến cha mẹ và trẻ em vì vậy nếu bạn có một người p hình thức cơ bản nhất sẽ là:
session.createFilter(p.getChildren(), "").list()
Điều này chỉ đơn giản trả về cho bạn một danh sách các trẻ em. Điều quan trọng cần lưu ý là bộ sưu tập được trả về không phải là "sống", nó không có bất kỳ cách nào liên kết với p.
Phần thú vị đến từ đối số thứ hai. Đây là một đoạn HQL. Ở đây ví dụ, bạn có thể muốn:
session.createFilter(p.getChildren(), "select count(*)").uniqueResult();
Bạn nói bạn có một mệnh đề where, vì vậy bạn cũng có thể muốn:
session.createFilter(p.getChildren(), "select count(*) where this.age > 18").uniqueResult();
Thông báo không có là từ khoản. Đó là để nói rằng mệnh đề từ được ngụ ý từ hiệp hội.Các phần tử của bộ sưu tập được đưa ra bí danh 'this' để bạn có thể tham khảo nó từ các phần khác của đoạn HQL.
Nguồn
2012-06-13 12:50:47
Hãy coi chừng rằng bạn dường như có ít quyền kiểm soát khóa được sử dụng khi thực hiện kiểm tra sự tồn tại có chứa trên LazyCollection. Đó là một chút của một gotcha bởi vì bạn không thể sử dụng các phím tự nhiên để làm kiểm tra sự tồn tại. –