7

xem xét lớp Account, RealAccount, VirtualAccount, và Operation ví dụ rằng:Sử dụng Hibernate Tiêu chuẩn API, làm thế nào để truy vấn cho một subproperty của một tài sản mà chỉ tồn tại với nhiều loại tài sản nhất định

class Account { } 
class RealAccount extends Account { String name; } 
class VirtualAccount extends Account { } 
class Operation { Account account; } 

Điều này có nghĩa rằng:

  1. Chỉ RealAccount có một trường gọi là name. tài khoản
  2. Operation 's có thể RealAccount hoặc VirtualAccount.

tôi muốn truy vấn cho tất cả Operation s mà thuộc về một RealAccount với một tên cụ thể:

session.createCriteria(Operation.class) 
    .createAlias("account", "_account") 
    .add(Restrictions.eq("_account.name", "Alice")) 
    .list(); 

này thất bại.

Câu hỏi của tôi: Sử dụng "cũ" Tiêu chuẩn Hibernate API, làm thế nào tôi có thể truy vấn cho tên tài khoản rằng chỉ tồn tại khi Operation 's tài khoản là một RealAccount? Có lẽ cái gì envolving DetachedCriteriaSubqueries ...

Trả lời

1

Bạn có thể tham khảo name trên RealAccount trong một subquery (sau đây ví dụ sử dụng HQL, nhưng một Criteria equivalent nên đơn giản):

select op from Operation op 
where op.account.id in 
    (select id from RealAccount where name = :name) 
+0

Đó không phải là tiêu chuẩn API. – MarcG

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