Tôi đang sử dụng JPA2 với API tiêu chí của nó để chọn các thực thể của tôi từ cơ sở dữ liệu. Việc triển khai thực hiện OpenJPA trên Máy chủ ứng dụng WebSphere. Tất cả các thực thể của tôi được mô hình hóa với Fetchtype = Lazy.jpa tìm nạp các thực thể trên nhiều cấp độ với tiêu chí api
Tôi chọn một thực thể có một số tiêu chí từ cơ sở dữ liệu và muốn tải tất cả dữ liệu lồng nhau từ các bảng phụ cùng một lúc. Nếu tôi có một DataModel nơi bảng A được tham gia oneToMany bảng B, tôi có thể sử dụng một Fetch-điều khoản trong truy vấn tiêu chí của tôi:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<A> cq = cb.createQuery(A.class);
Root<A> root = cq.from(A.class);
Fetch<A,B> fetch = root.fetch(A_.elementsOfB, JoinType.LEFT);
này hoạt động tốt. Tôi nhận được một phần tử A và tất cả các phần tử B của nó được điền chính xác. Bây giờ bảng B có mối quan hệ oneToMany với bảng C và tôi cũng muốn tải chúng. Vì vậy, tôi thêm các tuyên bố sau đây để truy vấn của tôi:
Fetch<B,C> fetch2 = fetch.fetch(B_.elementsOfC, JoinType.LEFT);
Nhưng điều này sẽ không làm gì cả.
Có ai biết cách tìm nạp các thực thể đa cấp trong một truy vấn không?
Cảm ơn rất nhiều câu trả lời của bạn. Nhưng có một ví dụ về JPQL trong bài viết tài liệu mà bạn đã chỉ ra: 'SELECT x FROM Magazine x tham gia tìm nạp x.articles một tham gia tìm nạp a.publishers p WHERE x.title = 'JDJ'' Có các bảng x, a và p với các quan hệ x-> a và a-> p. Đây chính xác là những gì tôi muốn làm với API tiêu chí. –
Bạn đã không đọc nó rất cẩn thận. Đây là ví dụ về truy vấn gây ra lỗi cú pháp. Câu trước truy vấn đó là: "Truy vấn sau sẽ dẫn đến lỗi cú pháp:". Những gì bạn muốn làm không hoạt động. –
Ồ, bạn nói đúng. Vì vậy, tôi chỉ có thể nói: Rất tiếc. Nhưng dù sao ... Có thực tế nào tôi có thể giải quyết một vấn đề như vậy không? Tôi nghĩ có rất nhiều người trên thế giới này muốn tìm hơn hai cái bàn. Tôi có phải tham gia bảng thứ hai trước hay tôi nên đọc các dữ liệu khác theo cách thủ công? Thực hành tốt nhất cho điều đó là gì? –