tôi có thể sử dụng findBy theo cách này không? Cục findByDepartmentId (Long Id);
Vâng, cú pháp này về mặt kỹ thuật là chính xác theo quan điểm của Spring JPA. Mặc dù Spring JPA cũng thông báo những gì bạn đang cố gắng đạt được với truy vấn của bạn cũng đang tìm kiếm kiểu trả về.
Về cơ bản đây là những trường hợp với nhiều loại trở lại:
với truy vấn của bạn, bạn muốn trả về một giá trị duy nhất - bạn có thể chỉ định loại hình cơ bản, Entity T
, Optional<T>
, CompletableFuture<T>
, vv
với truy vấn của bạn mà bạn muốn trả về bộ sưu tập T - bạn có thể chỉ định List<T>
, Stream<T>
, Page<T>
, Slice<T>
v.v.
Điều đó đang được nói, định nghĩa truy vấn của bạn:
Department findByDepartmentId(Long Id);
có nghĩa là bạn mong đợi một kết quả duy nhất (vì bạn đã chỉ định một thực thể duy nhất như là một kiểu trả về). Điều này sẽ phản ánh về cách Spring JPA thực hiện truy vấn - nó sẽ gọi getSingleResult() trên giao diện javax.persistence.Query
, sẽ ném một exception
nếu có nhiều đối tượng đáp ứng các tiêu chí.
Trên cơ sở nào findBydepartmentId trả lại một bản ghi?
Trên cơ sở có một đối tượng duy nhất với Id đó, nếu không nó sẽ ném một ngoại lệ.
Khi nào hoặc Tại sao tôi không nên sử dụng findBy thay cho findOneBy?
Hai giá trị này có ý nghĩa khác nhau và không thể hoán đổi cho nhau.
findOneBy
luôn dẫn đến getSingleResult() được gọi.
findBy
có hành vi khác nhau tùy thuộc vào loại trả về - theo các định nghĩa được nêu ở trên.
Tôi có cùng một câu hỏi, bạn đã nhận được thông tin này chưa? – Doug