2010-05-14 25 views
10

tôi cần để có thể làm như sau:Tiêu chuẩn Tùy Hibernate - Thêm điều kiện để một trái tham gia

Select * from Table1 trái tham gia Table2 trên id1 = id2 VÀ i1 =?

Tiêu chí ngủ đông không cho phép chỉ định i1 =? phần.

Mã hiện đang sử dụng các tiêu chí hibernate và nó sẽ là một cấu trúc lại rất lớn để trao đổi ra cho HQL

Không ai có bất cứ lời khuyên làm thế nào tôi có thể thực hiện điều này khác nhau hoặc cách nào để ghi đè lên các Tiêu chuẩn Hibernate? Tôi không phản đối việc mở hibernate và sửa đổi, nhưng khi tôi bắt đầu đào nó, có vẻ như là các lớp trên các lớp trừu tượng hóa. Tôi chưa bao giờ tìm thấy điểm mà SQL thực sự được tạo ra ...

Trả lời

0

Bạn có thể sử dụng chế độ Tìm nạp để Tham gia. Bạn có thể làm điều đó bằng cách thực hiện việc này:

Criteria criteria = session.createCriteria(Table1.class); 
criteria.setFetchMode(table2OutputList, FetchMode, JOIN); 
criteria.add(Restrictions.eq("i1", i1Value); 
return criteria.list(); 

Trong trường hợp này, bạn sẽ phải tìm nạp bảng2utputList trước khi chạy truy vấn này. Điều này article có thể cung cấp cho bạn một ý tưởng tốt hơn;

+1

Sẽ không phải là chỉ cần tạo này: SELECT * từ Table1 trái tham gia Table2 trên id1 = id2 WHERE i1 =? Tôi không muốn i1 =? ở nơi tôi muốn nó như là một phần của biểu thức "ON" .. –

13

này dường như là những gì tôi cần ...

http://opensource.atlassian.com/projects/hibernate/browse/HHH-2308

tức

public Criteria createAlias(String associationPath, String alias, int joinType, Criterion withClause) throws HibernateException; 

public Criteria createCriteria(String associationPath, String alias, int joinType, Criterion withClause) throws HibernateException; 
Các vấn đề liên quan