2016-05-12 1 views
3

Ich habe zwei Entitäten, ein Benutzer und ein registrierter Benutzer.Spring Data Repository-Methode, um durch das Feld eines Feldes zu finden

Ein registrierter Benutzer hat ein Feld vom Typ Benutzer. Ich würde gerne eine Methode im Frühjahr Daten-Repository in Bezug auf diese registrierte Benutzer-Entität haben, um alle registrierten Benutzer nach dem Benutzernamen des Benutzers, der mit dem registrierten Benutzer verbunden ist, zu suchen.

Also, das ist die registrierte Nutzer Einheit mit einem zugehörigen Benutzerfeld:

@Entity 
public class RegisteredUser implements Serializable { 

    ... 
    @OneToOne 
    @JoinColumn(name = "USERNAME_FK") 
    private User user; 
    ... 
} 

und dies ist ein Benutzer mit einem Benutzername:

@Entity 
public class User implements Serializable { 
    ... 
    @Id 
    @Column(nullable = false) 
    protected String username; 
    ... 
} 
+0

U ein OneToOne Mapping zwischen diesen zwei Entitäten .. verwenden, was bedeutet, dass u viele Nutzer für den gleichen RegisteredUser finden kann nicht .. ich denke, Sie sollten eine Anmerkung verwenden – FuSsA

Antwort

4

Spring Data (mindestens 1.12.x Version) verwendet die Methode PropertyPath#from, um den Pfad zu einer Eigenschaft für ein aus dem Methodennamen erstelltes Prädikat zu extrahieren. Gemäß sources wird Unterstrich als "Feldtrenner" verwendet. So erste Variante ist wie folgt

public interface RegisteredUserRepository extends CrudRepository<RegisteredUser,String> { 
    List<RegisteredUser> findRegisteredUserByUser_Username(String username); 
} 

Es gibt auch Code, der einen Groß char als Feldtrennzeichen zu behandeln, wenn ganzer Feldname nicht gefunden wird. Wenn Sie also ein userUsername Feld nicht in RegisteredUser zweiten varian haben, ist

public interface RegisteredUserRepository extends CrudRepository<RegisteredUser,String> { 
    List<RegisteredUser> findRegisteredUserByUserUsername(String username); 
} 
+0

Die zweite Option funktionierte (habe nicht versucht, die erste), danke. Übrigens wollte ich nur einen registrierten Benutzer finden (da es sich um eine Eins-zu-Eins-Beziehung handelt), also war die Methodensignatur am Ende: 'findOneRegisteredUserByUserUsername (String username) '. – nbro

Verwandte Themen