リファレンス 4.4 カスタム実装に従ってカスタム クエリを実装しようとしています。
Spring Data の MongoTemplate と MongoRepository の違いは何ですか?
mongoTemplate を使用した特別なクエリが必要なため、これを行っています。
私が得ているエラーは PropertyReferenceException です。そのため、spring-data は、不要なクエリを自動生成しようとしているようです。独自のカスタム クエリを使用したい。
org.springframework.data.mapping.PropertyReferenceException: No property search found for type com.eerra.core.common.dto.User
問題はここでも説明されていますが、解決策がうまくいかないようです:
http://forum.springsource.org/showthread.php?114454-Custom-repository-functionality
質問
spring-data がクエリを自動生成しようとせずに、カスタム クエリ インターフェイスと実装を実装するにはどうすればよいですか?
構成
春の構成
spring-data.xml
<!-- Spring Data MongoDB repository support -->
<mongo:repositories base-package="com.eerra.*.common.service" />
リポジトリ クラスとインターフェイスは、次のパッケージにあります。
com.eerra.core.common.service.UserRepositoryInterface.java com.eerra.core.common.service.UserRepositoryCustom.java (インターフェース) com.eerra.core.common.service.UserRepositoryCustomImpl.java (実装)
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);
}