web-dev-qa-db-fra.com

Quelle est la différence entre FETCH et LOAD for Entity graph of JPA?

Je suis nouveau sur JPA et j'essaie d'utiliser le graphique d'entité. Et j'ai réalisé que lorsque je récupère des données, je dois spécifier quel EntityGraphType je veux utiliser.

J'ai lu la spécification JPA2.1 mais je ne sais toujours pas comment utiliser correctement ces 2 options ...

la question est...

  • quelle option dois-je utiliser si je n'ai pas d'exigence particulière?
  • quelle est la situation spécifique lorsque j'ai besoin d'utiliser Fetch and Load?
27
Naga

Je vais commencer par répondre à la deuxième partie de votre question.

quelle est la situation spécifique lorsque j'ai besoin d'utiliser Fetch and Load?

Il existe deux façons principales de charger une entité dans JPA, le chargement et le paresseux chargement. Lors d'un chargement rapide, une entité est immédiatement chargée au moment où son parent est chargé. Dans le chargement paresseux, une entité n'est chargée que lorsqu'un getter réel pour cette entité est appelé. Les applications hautes performances ont tendance à être orientées vers le chargement paresseux, car il n'est pas très agréable de faire attendre l'utilisateur final qu'une table entière, ou même un groupe de tables, se charge au démarrage de l'application. Passons maintenant à votre deuxième question.

Vous spécifiez FETCH comme stratégie en important javax.persistence.fetchgraph dans le fichier contenant l'entité. Dans ce cas, tous les attributs spécifiés dans votre graphique d'entité seront traités comme FetchType.EAGER, et tous les attributs non spécifiés seront traités comme FetchType.LAZY. En revanche, si vous spécifiez LOAD comme stratégie en important javax.persistence.loadgraph alors tous les attributs spécifiés dans le graphique d'entité sont également FetchType.EAGER mais les attributs non spécifiés utilisent leur type spécifié ou par défaut si l'entité n'a rien spécifié.

quelle option dois-je utiliser si je n'ai pas d'exigence particulière?

Cela étant dit, il est peu probable que vous n'ayez pas d'exigence spécifique. À tout le moins, vous avez besoin que votre application Web s'exécute rapidement. Pour cette raison, vous devriez probablement utiliser par défaut le chargement paresseux. L'utilisation d'un graphique FETCH est une bonne option car elle est par défaut le chargement paresseux sauf dans les quelques cas spéciaux où vous estimez qu'un attribut devrait être très désireux chargé.

Voici un lien vers un excellent blog qui explique tout cela en détail, ainsi que des exemples de code.

35
Tim Biegeleisen