2012-11-20 47 views
5

Tôi mới sử dụng JPA dữ liệu Spring và đang cố gắng hiểu cách sử dụng tốt nhất nó với QueryDSL. Không có QueryDSL, tôi có thể chỉ cần tạo bất kỳ truy vấn nào trong giao diện SpringData của mình bằng chú thích @Query. Để có cùng trải nghiệm sử dụng QueryDSL, từ những gì tôi có thể thấy, tôi cần tạo triển khai kho lưu trữ tùy chỉnh của riêng mình và giao diện repo mở rộng giao diện triển khai tùy chỉnh của tôi hoặc đặt tất cả truy vấn QueryDSL của tôi ở lớp dịch vụ mà kết thúc tốt đẹp repo của tôi.JPA dữ liệu mùa xuân và QueryDSL

Trong trường hợp đầu tiên, tôi mất khả năng sử dụng bất kỳ phương pháp tự tạo SD nào (ví dụ: findAll (QueryDSL predicate)) trong repo tùy chỉnh của tôi vì tôi không có quyền truy cập đối tượng repo thực, và trong trường hợp thứ hai tôi đặt logic truy vấn ở tầng dịch vụ thay vì ở lớp repo.

Không có giải pháp nào đặc biệt hấp dẫn đối với tôi. Có cách nào thứ 3 phù hợp hơn không? Hoặc tôi có hiểu lầm làm thế nào để sử dụng đúng QueryDSL và dữ liệu mùa xuân?

Cảm ơn!

Eric

Trả lời

10

Có lẽ cách thuận tiện nhất là để cho giao diện kho lưu trữ của bạn chỉ đơn giản là mở rộng QueryDslPredicateExecutor mà thêm khả năng chỉ đơn giản là ống Querydsl Predicate đối tượng vào kho và thực hiện chúng độc lập hoặc cùng với PageableSort và những thứ tương tự.

Nếu bạn thực sự muốn ẩn kết hợp các biến vị ngữ vào tầng kho lưu trữ (hoàn toàn tốt nhưng thực sự phục vụ một mục đích khác), bạn tạo một lớp triển khai kho riêng biệt như được mô tả here và sử dụng QueryDslRepositorySupport làm lớp cơ sở. Trong các phương thức tìm kiếm được triển khai của bạn, bạn có thể sử dụng các phương thức from(…), update(…)delete(…) của lớp cơ sở để dễ dàng xây dựng và thực thi các truy vấn bằng cách sử dụng mô hình meta Querydsl.

+0

Vấn đề không phải là 'che giấu sự kết hợp của các biến vị ngữ vào kho', đối với tôi, đó là thêm' nhóm bởi' và ... vào các truy vấn của tôi và thực hiện chúng mà chỉ có vị ngữ dường như không gần như vậy – azerafati

+0

Thật không may , 'QueryDslPredicateExecutor' không cho phép sử dụng' groupBy', vv Chỉ có phần 'where' của truy vấn. Nó thường không đủ. Nhưng tùy chỉnh kho lưu trữ với 'QueryDslRepositorySupport' là lớp cơ sở thực sự tốt! – djxak

+0

@azerafati, hãy xem https://github.com/infobip/infobip-spring-data-jpa-querydsl, đó có thể là những gì bạn đang tìm kiếm. – lpandzic

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