web-dev-qa-db-fra.com

Méthode du référentiel de données Spring pour rechercher par le champ d'un champ

J'ai deux entités, un utilisateur et un utilisateur enregistré.

Un utilisateur enregistré a un champ de type utilisateur. Je voudrais avoir une méthode dans le référentiel de données de printemps lié à cette entité utilisateur enregistrée pour rechercher tous les utilisateurs enregistrés par le nom d'utilisateur de l'utilisateur connecté à l'utilisateur enregistré.

Il s'agit donc de l'entité utilisateur enregistrée avec un champ utilisateur associé:

@Entity
public class RegisteredUser implements Serializable {

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

et ceci est un utilisateur avec un nom d'utilisateur:

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

Spring Data (version 1.12.x au moins) utilise la méthode PropertyPath # from pour extraire le chemin vers une propriété pour un prédicat construit à partir du nom de la méthode. Selon sources il utilise le soulignement comme "séparateur de champs". Donc, la première variante est la suivante

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

Il existe également du code qui traite un caractère majuscule comme séparateur de champ si le nom de champ entier n'est pas trouvé. Donc, si vous n'avez pas de champ userUsername dans RegisteredUser le deuxième varian est

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