Ich versuche, eine benutzerdefinierte Abfrage nach dem Referenz 4.4 Benutzerdefinierte Implementierungen zu implementieren:feder Daten mongodb benutzerdefinierte Implementierung PropertyReferenceException
What's the difference between Spring Data's MongoTemplate and MongoRepository?
Ich tue dies, weil ich besondere brauchen Abfragen mit mongoTemplate.
Der Fehler, den ich bekomme, ist eine PropertyReferenceException. So scheint es, dass Spring-Daten versucht, die Abfrage automatisch zu generieren, die ich nicht will. Ich möchte meine eigene benutzerdefinierte Abfrage verwenden.
org.springframework.data.mapping.PropertyReferenceException: No property search found for type com.eerra.core.common.dto.User
Das Problem ist auch hier beschrieben, aber die Lösung scheint nicht für mich zu arbeiten:
http://forum.springsource.org/showthread.php?114454-Custom-repository-functionality
Frage
Wie kann ich meine benutzerdefinierte Abfrage-Schnittstelle implementieren und Implementierung ohne Spring-Daten versucht die Abfrage automatisch zu generieren?
Konfiguration
Federkonfiguration
feder data.xml
<!-- Spring Data MongoDB repository support -->
<mongo:repositories base-package="com.eerra.*.common.service" />
Die Repository-Klassen und Schnittstellen in folgendem Paket befinden:
com.eerra.core.common.service.UserRepositoryInterface.java com.eerra.core.common.service.UserRepoistoryCustom.java (Schnittstelle) com.eerra.core.common.service.UserRepositoryCustomImpl.java (Umsetzung)
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);
}