Tôi đang cố gắng để thực hiện một truy vấn tùy chỉnh theo Reference 4.4 Tuỳ chỉnh Triển khai:lò xo dữ liệu MongoDB tùy chỉnh thực hiện PropertyReferenceException
What's the difference between Spring Data's MongoTemplate and MongoRepository?
tôi đang làm điều này bởi vì tôi cần đặc biệt truy vấn bằng cách sử dụng mongoTemplate.
Lỗi tôi nhận được là một PropertyReferenceException. Vì vậy, có vẻ như dữ liệu mùa xuân đang cố gắng tự động tạo truy vấn mà tôi không muốn. Tôi muốn sử dụng truy vấn tùy chỉnh của riêng tôi.
org.springframework.data.mapping.PropertyReferenceException: No property search found for type com.eerra.core.common.dto.User
Vấn đề được mô tả cũng ở đây nhưng giải pháp dường như không làm việc cho tôi:
http://forum.springsource.org/showthread.php?114454-Custom-repository-functionality
Câu hỏi
Làm thế nào tôi có thể thực hiện giao diện truy vấn tùy chỉnh của tôi và thực hiện mà không có dữ liệu mùa xuân cố gắng tự động tạo truy vấn?
Cấu hình
Cấu hình mùa xuân
mùa xuân-data.xml
<!-- Spring Data MongoDB repository support -->
<mongo:repositories base-package="com.eerra.*.common.service" />
Các lớp Repository và giao diện đều nằm trong gói phần mềm sau đây:
com.eerra.core.common.service.UserRepositoryInterface.java com.eerra.core.common.service.UserRepoistoryCustom.java (giao diện) com.eerra.core.common.service.UserRepositoryCustomImpl.java (triển khai)
UserRepositoryCustom.java
public interface UserRepositoryCustom {
List<User> searchAllUsers();
}
UserRepositoryCustomImpl.java
public class UserRepositoryCustomImpl implements UserRepositoryCustom {
@Autowired
private MongoTemplate mongoTemplate;
@Override
public List<User> searchAllUsers() {
return mongoTemplate.findAll(User.class);
}
}
UserRepositoryInterface.java
@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String>, UserRepositoryCustom {
User findByEmail(String email);
List<User> findByEmailLike(String email);
List<User> findByEmailOrLastName(String email, String lastName);
List<User> findByEmailOrFirstNameLike(String email, String firstName);
@Query("{\"$or\" : [ { \"email\" : { \"$regex\" : ?0, \"$options\" : \"i\"}} , " +
"{ \"firstName\" : { \"$regex\" : ?0, \"$options\" : \"i\"}}, " +
"{ \"lastName\" : { \"$regex\" : ?0, \"$options\" : \"i\"}}]}")
List<User> findByEmailOrFirstNameOrLastNameLike(String searchText);
}