Obtenez en une seule rangée en JPA
Comment obtenir une seule ligne d'entité JPA?
Table: Employé
@Id
private int empId;
private String empName;
...
JPA par défaut de retour de la Liste. Je suis en train de chercher seule ligne.
EmployeeRepository :-
public Employee findByEmpName(String empName);
Une autre façon est de le faire, @Requête doit être utilisé.
@Query(value="select e from Employee e where empName = ?1 limit 1", nativeQuery=true)
public Employee findByEmpName(String empName);
Comment puis-je m'assurer que c'retour ligne unique et résultat correct.
Toute aide appréciée.. Merci à l'avance.
- JPQL n'a pas de LIMITE", comme toute base JPA documentation vous dirais, et
@Query
et XXXRepository a rien à faire avec l'API JPA non plus d'ailleurs, c'est le Printemps, les Données JPA
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de "s'assurer" quoi que ce soit.
Si vous n'avez pas une collection de tri spécifié comme retour (par exemple
List<Employee>
au lieu deEmployee
) et votre requête retourne plus d'un résultat, il va lancer unjavax.persistence.NonUniqueResultException: result returns more than one elements
.Si votre requête retourne plusieurs lignes et que vous voulez seulement un de ces soit d'ajouter une condition à différencier laquelle l'un de ces lignes que vous voulez vraiment ou, si elles sont les mêmes, ajouter un bon vieux
distinct
C'est votre travail lors de la rédaction de la requête
Il y a un hors de la zone de solution, dans le référentiel, vous pouvez mettre le nom de la méthode d'
findFirstBy...
oufindTopBy...
, qui devrait faire la chose.Vous pouvez en savoir plus en Printemps de la documentation de référence
Si vous souhaitez sélectionner une seule ligne du jeu de résultats, alors vous pouvez limiter le nombre d'enregistrements à l'aide de la requête.setMaxResults méthode:lors de la création de la jpa requête.
exemple : les critères.setMaxResults(25); : il se contente de récupérer 25 dossiers de 100 enregistrements.
m not using JPA Criteria API, I
m à l'aide de JPARepository.JPA ont une méthode pour récupérer une seule ligne
getSingleResult
, mais il est recommandé de récupérer une liste et d'en extraire le premier élément surgetResultList
.Voir: Exemple
Au cas où quelqu'un veut juste une seule ligne d'une base de données à l'aide de JpaRepository (spring-data-jpa), j'ai trouvé cela très utile:
Puisque c'est un flux, je suppose que les lignes (ou plutôt: les Objets) sont récupérés, ligne par ligne.