2015-01-01 39 views
12

Trong giao diện @Repository của tôi, tôi đã tạo phương thức tìm kiếm tùy chỉnh với JPQL @Query chứa tham số (addressType).Java 8 Spring JPA dữ liệu Tham số tham số

from Address a where a.addressType = :addressType

Trong phương pháp này tôi không nói rõ @ param ("addressType") trên các tham số. Vì vậy, tôi đang nhận được

java.lang.IllegalArgumentException: Tên cho tham số ràng buộc không được rỗng hoặc trống! Đối với các thông số tên bạn cần phải sử dụng @ param cho thông số phương pháp truy vấn trên các phiên bản Java < 8.

Được rồi, đây là khá nhiều rõ ràng, nhưng tôi đang sử dụng Java 8. Vì vậy, những gì là đặc biệt về Java 8 ở đây?

+0

Ôi trời ơi, bạn đã bỏ qua "SELECT a" từ truy vấn JPQL của bạn, vì vậy nó bây giờ là bất hợp pháp. –

Trả lời

11

Trong Java 8, bạn có thể sử dụng phản chiếu để truy cập tên của tham số của phương thức. Điều này làm cho chú thích @Param không cần thiết, vì Spring có thể suy ra tên của tham số JPQL từ tên của tham số phương thức.

Nhưng bạn cần sử dụng cờ -parameters với trình biên dịch để có thông tin đó.

Xem http://docs.oracle.com/javase/tutorial/reflect/member/methodparameterreflection.html.

+1

Cảm ơn câu trả lời. Nhưng tôi đang sử dụng Java8 và SpringData vẫn hỏi tôi về chú giải @Param. –

+3

Bạn đã biên soạn các lớp học của mình bằng tùy chọn -parameters, như được giải thích trong trang tôi đã liên kết đến chưa? –

+0

Không, tôi đã không thử điều đó, tôi quyết định chỉ gắn bó với chú thích @Param vì mã sẽ không hoạt động nếu không có cấu hình biên dịch đặc biệt. Nhưng điều này bình luận của bạn giải thích những gì bạn có nghĩa là trong câu trả lời chính của bạn. Cảm ơn bạn! –

7

Câu trả lời được đưa ra bởi @JB Nizet là chính xác, nhưng tôi chỉ muốn chỉ ra cách thêm cờ -parameters cho trình biên dịch Java 8 khi sử dụng Eclipse. Đây là trong Window -> Preferences:

enter image description here

Maven cũng cho phép thêm các cờ trong pom bản thân:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.5.1</version> 
    <configuration> 
     <compilerArgs> 
      <arg>-verbose</arg> 
      <arg>-parameters</arg> 
     </compilerArgs> 
    </configuration> 
</plugin> 
+0

Nó hoạt động với Dữ liệu mùa xuân? – Alex78191

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