Comment décidez-vous dans quelles classes d'entités à mettre des annotations JPA NamedQuery?
-
18-09-2019 - |
Question
Dire que j'ai un client - un à plusieurs CustomerOrder relation bidirectionnelle avec la CustomerOrder tenant la valeur totale de chaque commande
.Si j'avais une requête pour trouver la valeur totale de toutes les commandes pour un client particulier:
select SUM(o.orderValue) from CustomerOrder o where o.customer = :customer
Est-il important dans quelle classe entité est ce annotées? Pourquoi voudriez-vous mettre dans l'un ou l'autre?
La solution
Est-il important dans quelle classe entité est ce annotées?
D'un point de vue technique, il n'a pas d'importance que vous utiliserez le name
d'un @NamedQuery
pour l'appeler.
Pourquoi voudriez-vous mettre dans l'un ou l'autre?
Mais, d'un point de vue « logique », en mettant l'@NamedQuery
où est « naturellement » appartient va certainement faciliter l'entretien. Dans votre exemple, je mettrais la requête dans l'entité CustomerOrder
parce que la requête est de trouver CustomerOrder
, c'est juste où je vous attendez à trouver si je devais chercher.
Autres conseils
Il n'a pas d'importance.
Le principe général est de le mettre là où il appartient logiquement. Dans votre cas - il vaut mieux être dans CustomerOrder
Mettez-les dans les fichiers de mappage XML qui doivent être déclarées dans le persistence.xml. Voir ce grand lien: Arjan -tijms.omnifaces.org/2010/09/where-to-put-named-queries-in-jpa
Beaucoup de requêtes ne sont pas « naturellement » appartiennent à l'entité (et plus vous devez modifier le code de l'entité, si vous les mettez là, chaque fois que vous avez besoin d'une nouvelle requête).