Différence entre findBy et findOneBy au Printemps de données JPA
Tout ce que je sais, c'est que FindBy peut retourner plusieurs résultats tout en FindOneBy retournera un résultat unique ou null lorsque nous de l'utiliser de la manière suivante.
List<Department> findByDepartmentName(String name);
Department findOneByDepartmentId(Long Id);
maintenant, ma question est, puis-je utiliser findBy de cette façon?
Department findByDepartmentId(Long Id);
Si oui,
- Permet de supposer il y a plusieurs enregistrements pour l'Id donné.
- Sur quelle base findBydepartmentId retour un seul enregistrement?
Enfin, Quand, Pourquoi devrais-je pas utiliser findBy en place de findOneBy?
J'ai la même question, avez-vous obtenu vers le bas de cette?
OriginalL'auteur Arun Gowda | 2017-08-31
Vous devez vous connecter pour publier un commentaire.
Oui, cette syntaxe est techniquement correcte à partir du Printemps JPA point de vue. Même si le Printemps JPA déduit ce que vous essayez d'atteindre avec votre requête de recherche à l' type de retour.
Fondamentalement, ce sont les cas pour les types de retour:
avec votre requête, vous voulez retourner une valeur unique - vous pouvez spécifier
basic type
,Entity T
,Option<T>
,CompletableFuture<T>
etc.avec votre requête, vous voulez retourner une collection de T - vous pouvez spécifier
List<T>
,Flux<T>
,<T>
,Slice<T>
etc.Cela étant dit, votre définition de la requête:
signifie que vous vous attendez à un résultat unique (parce que vous avez spécifié
Entity T
un type de retour). Cela vous permettra de réfléchir sur la façon de Printemps JPA exécute la requête, il va appelergetSingleResult()
sur lejavax.la persistance.Requête
interface, qui va jeter unexception
si plus d'un des objets de satisfaire à ces critères.Sur la base qu'il n'y a qu'un seul objet avec l'Id, sinon il va lever une exception.
Ces deux-là ont des significations différentes et ne sont pas interchangeables.
findOneBy
toujours des résultats dansgetSingleResult()
invoquée.findBy
a un comportement différent selon le type de retour (selon les définitions données ci-dessus.OriginalL'auteur hovanessyan
findOneByXX
permettra de s'assurer qu'il n'existe qu'une seule ou aucune valeur, si il y a 2 valeurs, une exception sera levée.Cependant
findByXX
ne pas faire cette vérification de l'unicité.OriginalL'auteur Mohamed Amine Mrad