web-dev-qa-db-fra.com

Différence entre findBy et findOneBy dans Spring Data JPA

Tout ce que je sais à ce jour, c’est que FindBy peut renvoyer plusieurs résultats tandis que FindOneBy renverra un seul résultat ou sera nul lorsque nous l’utiliserons de la manière suivante.

List<Department> findByDepartmentName(String name);
Department findOneByDepartmentId(Long Id);

ma question est la suivante: puis-je utiliser findBy de cette façon?

Department  findByDepartmentId(Long Id);

Si oui,

  • Supposons qu'il existe plusieurs enregistrements pour un identifiant donné.
  • Sur quelle base findBydepartmentId renvoie-t-il un seul enregistrement?

Enfin, quand ou pourquoi ne devrais-je pas utiliser findBy à la place de findOneBy?

11
Arun Gowda

Puis-je utiliser findBy de cette façon? Département findByDepartmentId(Long Id);

Oui, cette syntaxe est techniquement correcte du point de vue de Spring JPA. Bien que Spring JPA déduise ce que vous essayez d’obtenir avec votre requête, examinez également le type return.

En gros, ce sont les cas pour les types de retour:

Cela étant dit, votre définition de requête:

Department findByDepartmentId(Long Id);

signifie que vous attendez un seul résultat (car vous avez spécifié une seule entité comme type de retour). Cela va refléter la manière dont Spring JPA exécute la requête - il appellera getSingleResult() sur l'interface javax.persistence.Query, ce qui lancera une exception si plusieurs objets répondent aux critères.

Sur quelle base findBydepartmentId renvoie-t-il un seul enregistrement?

Sur la base qu'il existe un seul objet avec cet ID, sinon, il lèvera une exception.

Quand ou pourquoi ne devrais-je pas utiliser findBy à la place de findOneBy?

Ces deux ont des significations différentes et ne sont pas interchangeables.

findOneBy a toujours pour résultat que getSingleResult() est invoqué.

findBy a un comportement différent en fonction du type de retour - conformément aux définitions données ci-dessus.

7
hovanessyan

findOneByXX s'assurera qu'il n'y a qu'une ou aucune valeur, s'il y a 2 valeurs, une exception sera levée. 

Cependant, findByXX ne fait pas cette vérification de l'unicité.

2
Mohamed Amine Mrad