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;
...
}
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);
}