2017-10-11 1 views
1

Ich bin mir nicht sicher, ob ich mit dieser Aufgabe die Grenzen der Methodenabfrage erreicht habe. Ich habe zwei Tabellen, eine User Tabelle und eine Password Tabelle. A User kann mehrere Password s haben (wobei die neueste die aktuelle ist).Methodenabfrage mit mehreren Tabellen einschließlich Bestellung?

Ich möchte eine Methodenabfrage in meinem User Repository machen, um eine "aktuelle" Password für einen Benutzernamen abzurufen.

In SQL es so etwas wie dieses

"Select FIRST(*) from Passwords INNERJOIN Users ON Users.id=Passwords.userId WHERE Users.username=%s ORDER BY Passwords.created DESC" 

aussehen würde, was ich als Methode Abfrage versucht haben, ist findFirstPasswordOrderByPasswords_CreatedByUsers_Username(String username)

die mir eine Ausnahme gibt:

No property byUsers found for type long! Traversed path: UsersEntity.passwords.created.

I don‘ Ich weiß, warum es immer noch auf das Feld created zeigt. Ist das zu viel für Methodenabfragen? Oder mache ich es einfach falsch?

Antwort

1

Sie sollten diese Methode im Passwort-Repository definieren, während Sie nach einem Passwort suchen. In diesem Repository diese Methode wird wie folgt aussehen:

Passwords findFirstByUser_UsernameOrderByCreatedDesc(String username); 

diese Methode zu implementieren, sollte Ihr Passwort Entitätsklasse hat Verweis auf Tabelle Benutzer auf User-Eigenschaft (aus der Abfrage)

+0

Bedeutet dies, dass ich begrenzt, um 'UserEntities' nur von meinem 'UserRepository' zu erhalten? –

+1

Ja, Abfragemethoden in Repositories sind auf Entitäten beschränkt, mit denen das Repository verbunden ist. Sie können jedoch eine Methode mit einer benutzerdefinierten @ Query-Annotation verwenden, die die gewünschte Abfrage enthält. –