2016-06-16 7 views
0

ich meinen Frühling JPA-Repositorys bekam arbeiten, aber ich kann nicht benutzerdefinierte Methoden mit darin wie folgt ist mein einfaches RepositoryÄrger benutzerdefinierte Methoden Hinzufügen jap Repositories zum Frühling

@Repository 
public interface UserRepository extends CrudRepository<JPA_Users, Long> { 

    List<JPA_Users> findByName(String Name); 

} 

dann in meiner Controller-Klasse erstellen i Variable CrudRepository erklären Repository;

und bekam es instanziiert

ApplicationContext context = new ClassPathXmlApplicationContext("beans1.xml"); 
repository = context.getBean(UserRepository.class); 

Nun, da ich erwartete ich haben kann, dass durch repository.findByName mit und ich finde nicht, dass

auf die ich durch viele Artikel werde sie wollen Service und dann seine Implementierung und dann tun sie die Autowirkung ich bekomme keine dieser Ideen. bitte leite mich

Hinweis eine benutzerdefinierte JPA-Repository-Methode erklärt, dass ich XML, wo jpaVendorAdapter EntityManagerFactory etc deklariert sind und arbeiten, wie ich einfach Repository erwartet durch i CRUD

Shahzad

+0

Bitte nicht mich Ihnen sagen, sind eine Instanz der Kontext tatsächlich zu schaffen wieder eine Abhängigkeit abzurufen? Es sei denn, Sie möchten seltsame Speicher-, Transaktions- und Nebenläufigkeitsprobleme, die Sie verwenden müssen, andernfalls verwenden Sie die Abhängigkeitsinjektion. –

+0

Sie müssen die Variable wie das UserRepository-Repository nicht als CrudRepository-Repository deklarieren. Und wie M. Deinum erwähnt, müssen Sie nur einen Kontext mit all Ihren Beans erstellen - Repositories, Controller und was Sie sonst noch brauchen (im Gegensatz zum Erstellen des Kontexts innerhalb Ihres Controllers). – Michal

+0

Michal Dank für meinen Fehler Benutzer-Repository unter Hinweis darauf gearbeitet und jetzt das Objekt findByName Funktion Aber jetzt habe ich ein paar mehr Probleme Hinweis i Funktion in Repository als Liste findByName (String Name) zu erklären; Ich habe den folgenden Anruf Iterable usrs = repository.findByName ("shahzad"); und ich habe erwartet, dass eine Liste von Datensätzen zurückgeben wird. Ich habe mehrere Datensätze mit Shahzad Name Spalte M.Deinum ich bin ein bisschen neu im Frühjahr und Java und in der Regel ich nur Schritt für Schritt Anweisungen folgen können Sie bitte geben Sie mir mehr Bildung –

Antwort

0

, wenn Sie bereits Draht tun können die beans1.xml auf Ihre Anwendungskontext, erklären dann das Repository in Ihrem Controller wie folgt:

@Autowired 
private UserRepository repository; 

Ansonsten in Ihrem Codebeispiel, sollten Sie Ihre „Repository“ Variable a deklarieren s eine Instanz von UserRepository:

UserRepository repository = (UserRepository) context.getBean(UserRepository.class); 

Denn wenn Sie es als CrudRepository deklarieren, kann die Elternklasse erfolgreich gegossen werden, aber die Unterschrift Ihrer Schnittstelle verloren.

+0

Ja, ich habe es, aber ich habe ein anderes Problem, dass ich oben Kommentare gegen zwei Kommentare schrieb. Kannst du bitte das gut sagen danke schonmal :) –

+0

ich sehe. Kannst du den Code auch einfügen, ich bin ein wenig verwirrt darüber, was deine nächste Frage ist? – LynxZh

+0

LynxZh autowired wird auch für mich ein wenig verwirrt. Ich habe MVC-Anwendung und in meiner Controller-Funktion RequestMapping zu einer URL Ich erstelle den Anwendungskontext als ApplicationContext context = new ClassPathXmlApplicationContext ("beans1.xml"); Ich kann nicht Autowired innerhalb der RequestMapping-Funktion deklarieren, wo ich autowired Variable deklarieren sollte. Ich habe versucht, es unter der Klassendeklaration zu deklarieren, aber das gab einen Fehler. bitte führen Sie –

0

LynxZh mein Code ist einfach i Repository als

@Repository 
public interface UserRepository extends CrudRepository<JPA_Users, Long> { 

    List<JPA_Users> findByName(String Name); 

} 

dann ich eine Controller-Klasse haben mit Anfrage folgende Mapped Funktion

@RequestMapping(value = "/jpadata1", method = RequestMethod.GET) 
    public String jpadata1(ModelMap map) {   
     UserRepository repository; 


     //Remember  beans1.xml is located in src/main/resources folder but 
     //load with just beans1.xml 
     ApplicationContext context = new ClassPathXmlApplicationContext("beans1.xml"); 
     repository = context.getBean(UserRepository.class); 

Sie sehen, kann ich mein Repository dann i Funktion folgende genannt

Iterable usrs = repository.findByName ("jpa-Daten");

und alle Datensätze mit Namen shahzad erwartet wird Rückkehr, aber es zurückgeben keine Aufzeichnungen

+0

Sie können Ihre ursprüngliche Frage bearbeiten und diese unterhalb Ihrer ursprünglichen setzen. – LynxZh

Verwandte Themen