8

Tôi muốn chuyển đổi subquery sau để sử dụng hibernate subquery:Tiêu chuẩn subquery với không null

getCurrentSession().createQuery("from Employee where id in (select adminId from Department where adminId is not null)") 
        .list(); 
  • nhân viên:

    @ManyToOne 
    @JoinColumn(name = "fk_department_id", nullable = true) 
    private Department department; 
    
  • cục:

    @OneToMany(fetch = FetchType.EAGER) 
    @JoinColumn(name = "fk_department_id") 
    private Set<Employee> employees = new HashSet<Employee>(0); 
    

Bất cứ ai có thể vui lòng cung cấp cho tôi một ví dụ về chuyển đổi này, bởi vì tôi đọc một số ví dụ và tôi vẫn không thể tìm ra cách để làm điều đó.

+0

BTW, gần đây tôi gặp vấn đề nghiêm trọng khi điều chỉnh bất kỳ khối mã nào khi đăng câu hỏi mới, tôi thường sao chép mã từ IDE của tôi hoặc từ tệp văn bản và đánh dấu mã rồi bao quanh mã đó bằng nút mã, nhưng được hiển thị xấu. –

+0

Đó là vì bạn đang sử dụng các tab thay vì dấu cách. –

+0

bạn có thể cho tôi biết làm thế nào bạn có thể định dạng lại mã, vì vậy tôi có thể tránh điều đó trong tương lai? –

Trả lời

19
Criteria c = session.createCriteria(Employee.class, "e"); 
DetachedCriteria dc = DetachedCriteria.forClass(Departemt.class, "d"); 
dc.add(Restrictions.isNotNull("d.adminId"); 
dc.setProjection(Projections.property("d.adminId")); 
c.add(Subqueries.propertyIn("e.id", dc)); 

Cuộc gọi setProjection làm subquery trả lại adminId tài sản duy nhất thay vì toàn bộ Department thực thể. Subqueries.propertyIn tạo hạn chế: thuộc tính id của nhân viên được tìm kiếm phải là in tập hợp kết quả được truy vấn con trả về.

+0

nó hoạt động tốt, cảm ơn, nhưng bạn có thể vui lòng cung cấp ít lời giải thích cho hai dòng cuối cùng, tôi không thể tìm thấy doc cho họ. –

+0

Xong. Xem chỉnh sửa của tôi. –

Các vấn đề liên quan