Próbuję zaimplementować zapytanie niestandardową według Reference 4.4 niestandardowych zastosowań:sprężynowy danych MongoDB zwyczaj realizacja PropertyReferenceException
What's the difference between Spring Data's MongoTemplate and MongoRepository?
Robię to, bo muszę specjalny zapytania za pomocą mongoTemplate.
Błąd, który dostaję, to wyjątek PropertyReferenceException. Wydaje się więc, że dane źródłowe próbują automatycznie wygenerować zapytanie, którego nie chcę. Chcę użyć własnego zapytania niestandardowego.
org.springframework.data.mapping.PropertyReferenceException: No property search found for type com.eerra.core.common.dto.User
Problem opisany jest również tutaj, ale rozwiązanie nie wydaje się działać dla mnie:
http://forum.springsource.org/showthread.php?114454-Custom-repository-functionality
Pytanie
Jak mogę realizować moje niestandardowy interfejs zapytań i implementacja bez danych sprężynowych próbujących automatycznie wygenerować zapytanie?
konfiguracji
Wiosna konfiguracji
sprężyny data.xml
<!-- Spring Data MongoDB repository support -->
<mongo:repositories base-package="com.eerra.*.common.service" />
repozytorium klas i interfejsy są usytuowane w następujących opakowaniu:
com.eerra.core.common.service.UserRepositoryInterface.java com.eerra.core.common.service.UserRepoistoryCustom.java (interfejs) com.eerra.core.common.service.UserRepositoryCustomImpl.java (realizacja)
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);
}