Có cách nào để xác định Đặc tả dữ liệu mùa xuân (trả về biến vị ngữ JPA) có mục đích duy nhất là thực hiện tìm nạp háo hức không?Tìm nạp JPA dữ liệu mùa xuân
Tôi có một thực thể xác định các mối quan hệ khác nhau bằng cách tải chậm, nhưng có một số truy vấn mà tôi muốn trả về toàn bộ biểu diễn thực thể bao gồm tất cả các bộ sưu tập liên quan, nhưng tiêu chí của các truy vấn này có thể khác nhau. Tôi đã nhìn thấy một vài bài đăng (ví dụ: trên spring forum) thảo luận về việc giới thiệu tiềm năng các nhóm tìm nạp, đây có thể là giải pháp lý tưởng; tuy nhiên, vì đây chưa phải là một phần của đặc tả JPA, Spring Data không cung cấp hỗ trợ cho nó.
Tôi đang tìm cách tái sử dụng để thực hiện tìm nạp mong muốn trên nhiều truy vấn động khác nhau.
Ví dụ, tôi đã coi việc phát triển một số kỹ thuật tái sử dụng với mục đích duy nhất là để thực hiện việc bốc háo hức, và có thể được kết hợp với thông số kỹ thuật khác, ví dụ:
private static Specification<MyEntity> eager() {
return new Specification<MyEntity>() {
@Override
public Predicate toPredicate(Root<MyEntity> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
for (PluralAttribute<? super MyEntity, ?, ?> fetch : root.getModel().getPluralAttributes()) {
root.fetch(fetch, JoinType.LEFT);
}
query.distinct(true);
return null;
}
};
}
Mục đích của kỹ thuật này là để tái sử dụng nó trong các truy vấn khác nhau, ví dụ:
repository.findAll(where(eager()).and(otherCriteria).or(otherCriteria));
Tuy nhiên, đặc điểm kỹ thuật lấy háo hức không phải là một vị đúng, vì vậy nó sẽ trả về null
, và sẽ gây ra vấn đề rõ ràng (ví dụ NullPointerExceptions
) khi CHAINE d với các vị từ khác.
(Lưu ý rằng vị từ này một mình hoạt động như mong đợi; tức là truy vấn sau sẽ tìm nạp đúng cách: repository.findAll(eager());
).
Có một Predicate không có giá trị thích hợp có thể được trả về từ đặc tả "háo hức" hay không. Có cách tiếp cận tái sử dụng khác để kích hoạt tìm nạp mong muốn bằng cách sử dụng thông số JPA Spring Data (không cần phải tải)?
Tôi nhận được ngoại lệ sau khi sử dụng phương pháp tiếp cận của bạn: "truy vấn tìm nạp được chỉ định truy vấn, nhưng chủ sở hữu của liên kết được tìm nạp không có trong danh sách chọn". – svlada
cách khác, có cách tiếp cận như thế này sẽ làm việc để làm cho tất cả các mối quan hệ lười biếng? – chrismarx