2010-02-05 29 views
21

Tôi muốn thực hiện LEFT OUTER JOIN giữa hai bảng sử dụng API Tiêu chí. Tất cả tôi có thể tìm thấy trong tài liệu hướng dẫn Hibernate là phương pháp này:(Lười biếng) TRÁI LẠI NGOÀI SỬ DỤNG sử dụng Tiêu chí Hibernate API

Criteria criteria = this.crudService 
      .initializeCriteria(Applicant.class) 
      .setFetchMode("products", FetchMode.JOIN) 
      .createAlias("products", "product"); 

Tuy nhiên, điều này hoặc thực hiện một bên tham gia hoặc quyền bên ngoài tham gia, vì số lượng kết quả trả về.

Tôi cũng muốn tham gia của mình là Lười biếng. Tôi có thể làm cái này như thế nào?

Chúc mừng!

CẬP NHẬT: Dường như việc sử dụng bí danh làm cho tham gia INNER JOIN tự động. Có một cái gì đó trong "câu chuyện nền" tôi chưa nắm bắt được. Vì vậy, không có bí danh ngày hôm nay. Điều này khiến tôi gặp vấn đề khi áp dụng các hạn chế cho hai bảng, vì cả hai đều có một cột (hoặc thuộc tính, nếu điều này thích hợp hơn) 'tên'.

+2

Chấp nhận câu trả lời rồi. –

+0

Tôi muốn biết bạn tham chiếu về "createAlia() trong Hibernate theo mặc định sẽ tạo một INNER JOIN". Tôi đã tìm kiếm API và không thể nhìn thấy nó. Cảm ơn. – FaithReaper

Trả lời

0

Tham gia có trong yêu cầu SQL. Nó không thể lười biếng.


Với Hibernate, để truy xuất dữ liệu này, chỉ cần loại trừ dữ liệu này khỏi yêu cầu HQL. Sau đó, khi bạn truy cập vào các getters trên thực thể của bạn (nếu phiên của bạn vẫn còn mở), nó sẽ được nạp tự động (bạn không cần phải viết một phần của yêu cầu).

+0

Xin lỗi, tôi không hiểu. Có lẽ tôi nên rephrase: Tôi muốn có một LEFT OUTER JOIN, nhưng tôi cũng muốn dữ liệu được thực sự lấy ra chỉ khi cần thiết (getter thích hợp được gọi là). Là sự lười biếng (hay háo hức) bằng cách nào đó kết nối với kiểu SQL JOIN diễn ra? –

+0

Lười biếng có thể được thực hiện với các đối tượng, nhưng không phải với một yêu cầu SQL. Một yêu cầu được thực hiện một lần đầy đủ, nó không được thiết kế sao cho một phần của yêu cầu được thực thi sau này nếu cần! – KLE

+0

Trong HQL tôi viết LEFT OUTER JOIN FETCH. Vì vậy, có lẽ một truy vấn HQL tương ứng với nhiều truy vấn SQL, được thực hiện khi cần thiết? Dù sao, lười biếng hay không, làm thế nào tôi có thể làm một LEFT OUTER JOIN? Và không phải trong HQL, sử dụng API tiêu chí. Chúc mừng! –

34

Nếu bạn cần phải rời tham gia vào bảng sản phẩm chỉ làm:

..... createAlias ​​("sản phẩm", "sản phẩm", Criteria.LEFT_JOIN);

+0

thực sự đơn giản và hữu ích, cảm ơn rất nhiều! – Sllouyssgort

+1

Không được chấp nhận ngay bây giờ, sử dụng câu trả lời của Ankit – jlars62

20

API của câu trả lời Sdavids là deprecated ngay bây giờ. phiên bản cập nhật của nó là

.... createAlias ​​("nhân viên", "emp", JoinType.LEFT_OUTER_JOIN)

+0

Cảm ơn bạn. Nó giúp tôi loại bỏ việc sử dụng API không dùng nữa –

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