2014-10-31 18 views
5

Tôi có một kho lưu trữ đó trông như thế này:mùa xuân dữ liệu JPA kho: IN-điều khoản trong truy vấn nguồn gốc không làm việc

public interface UserRepository extends JpaRepository<User, Long> 
{ 
    User findByEmailIgnoreCase(String email); 

    @Query("select u from User u where u.id in (:ids)") 
    Set<User> getByIdInSet(@Param("ids") Set<Long> ids); 
} 

Khi tôi gọi getByIdInSet tôi nhận được lỗi sau:

Caused by: java.lang.IllegalArgumentException: You have attempted to set a value of type class org.eclipse.persistence.indirection.IndirectSet for parameter ids with expected type of class java.lang.Long from query string select u from User u where u.id in (:ids). 
    at org.eclipse.persistence.internal.jpa.QueryImpl.setParameterInternal(QueryImpl.java:933) 
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.setParameter(EJBQueryImpl.java:593) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 

Rõ ràng Tôi không biết điều gì có nghĩa là vì tôi đã thử thay đổi tất cả các loại dữ liệu và vẫn gặp lỗi tương tự. Tập hợp các id tôi đang truyền chỉ chứa một id. Hãy chỉ cho tôi hướng đi đúng.

Trả lời

11

Hãy thử nó không có dấu ngoặc

@Query("select u from User u where u.id in :ids") 
+1

Hình như mà làm việc, cảm ơn. Tại sao một số địa điểm yêu cầu parens xung quanh bộ sưu tập? Tôi có một số kho lưu trữ khác mà yêu cầu các parens và sự khác biệt duy nhất tôi có thể thấy là parens là trên bộ sưu tập của thực thể và không phải là param. Đó có phải là sự khác biệt? –

+1

Tài liệu tham khảo của tôi là [bài đăng này] (http://stackoverflow.com/a/4379008/4074715), trong đó nó nói rằng bạn không cần các parens với tham số có giá trị thu thập. Rõ ràng, Hibernate hoạt động khác nhau trong các phiên bản khác nhau, không biết về EclipseLink. Không thể tìm thấy bất kỳ tham chiếu JPA chính thức nào về điều này, tôi sẽ cập nhật câu trả lời của mình nếu tôi tìm thấy điều gì đó. –

+2

[Ở đây] (http://stackoverflow.com/a/2793690/4074715) là một bài viết về điều này, với tham chiếu đến lỗi Hibernate với các yêu cầu parens xung quanh tham số. –

1

Phiên bản mới nhất của mùa xuân dữ liệu JPA hỗ trợ TRÊN từ khóa mà có thể được sử dụng để tạo ra các truy vấn như sau:

Set<User> findByIdIn(Set<Long> ids); 
Các vấn đề liên quan