spring-data mongodb benutzerdefinierte Implementierung PropertyReferenceException
Ich versuche, die Implementierung einer benutzerdefinierten Abfrage nach der Referenz 4.4 Benutzerdefinierte Implementierungen:
Was ist der Unterschied zwischen Spring-Daten MongoTemplate und MongoRepository?
Ich Tue dies, weil ich brauche spezielle Abfragen mit mongoTemplate.
Die Fehler, die ich bekommen hab ist ein PropertyReferenceException. So es scheint, dass der Frühling-Daten versucht zu auto-Generierung der Abfrage, die ich nicht will. Ich möchte meine eigene benutzerdefinierte Abfrage.
org.springframework.data.mapping.PropertyReferenceException: No property search found for type com.eerra.core.common.dto.User
Das problem auch wird hier beschrieben, aber die Lösung scheint nicht zu funktionieren für mich:
http://forum.springsource.org/showthread.php?114454-Custom-repository-functionality
Frage
Wie kann ich die Umsetzung meiner benutzerdefinierten Abfrage-Schnittstelle und Implementierung, die ohne Frühling-Daten versucht zu auto-Generierung der Abfrage?
Konfiguration
Spring-Konfiguration
spring-data.xml
<!-- Spring Data MongoDB repository support -->
<mongo:repositories base-package="com.eerra.*.common.service" />
Den Repository-Klassen und Schnittstellen, befinden sich im folgenden Paket:
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);
}
{ 'email': ?0 }
statt { \"email\": ?0 }
InformationsquelleAutor Christopher Armstrong | 2013-06-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist gelöst. Dieser Fehler erscheint, wenn die Impl-Klasse ist falsch benannt. Die Impl-Klasse hat nach dem repository-Klasse. Also die Namen haben, werden folgende für dieses Beispiel:
Finden Sie die Antwort hier:
Was ist der Unterschied zwischen Spring-Daten MongoTemplate und MongoRepository?
InformationsquelleAutor Christopher Armstrong