12
votes

JPA EntityManager, comment ça marche?

Désolé pour la question noob, mais j'ai des problèmes avec JPA + hibernate, donc je pensais que quelque chose n'est pas clair dans mon esprit. J'ai des entités, disons A, B, C, D et j'ai codé des amethods, Bmethods, des CMETHODS, DMETHODS. Chacune des * méthodes classes contient l'initialisation de l'entitéManager via entityManagererFactory et certaines méthodes qui exécutent essentiellement des requêtes. Je ne sais pas si je devrais utiliser un modèle singleton (de sorte que j'ai une classe d'entitémanager par * classe) ou si je dois ouvrir et fermer l'entitémanager chaque fois que j'exécute une requête ou je persiste / enlever une entité ... Pouvez-vous m'aider ??


0 commentaires

4 Réponses :


3
votes

EntityManager est associé à un contexte de persistance. Utilisez un modèle singleton si toutes les entités sont associées à un contexte. Vous utilisez JPA sur le côté serveur, non? Si oui, vous pouvez initialiser l'entitémanager dans des méthodes init, comme ANI () sur des servlets.


6 commentaires

J'utilise le même contexte de persistance, chaque entité est associée à un contexte. J'utilise JPA sur le côté serveur, mais je l'utilise également dans une application Java en cours d'exécution en arrière-plan ... Je devrais initialiser le contexte dans cette application et créer des méthodes qui transmettent l'entitémanager en tant que paramètre ??


Oui, si le service et votre application backgound sont des applications différentes, il est nécessaire d'initier l'entitémanager pour les deux. Je pense que ce serait une tâche difficile de sérialiser l'instance d'EntityManager.


Utilisez le ressort, utilisez Hibernate. Pourquoi EJB?


Je viens d'utiliser JPA comme expliqué ici: Java.sun.com/ Javaee / 5 / Docs / Tutoriel / Doc / Bnbpz.html . Y a-t-il quelque chose qui ne va pas avec mon approche?


JPA UTILISEZ AS SOULINE ORM comme un pilote. Pourquoi n'utilisez-vous pas d'ormer sans aucune abstraction?


Donc, vous pensez que je devrais créer des objets et laisser JPA faire le reste? J'ai utilisé l'approche expliquée dans le sujet parce que j'ai trouvé plus facile pour obtenir toutes les entités qui satisfont à une condition (à utiliser des requêtes) et à persister beaucoup d'entités à la fois ...



9
votes

Dans une application typique JPA / Hibernate, vous ne mettez pas la logique de persistance dans les classes d'entité elles-mêmes. Ceci est un gros changement de philosophie de conception par rapport aux applications EJB 2.x plus anciennes. Au lieu de cela, de nombreuses applications créent une couche d'objets d'accès aux données - séparé des entités - qui utilisent des instances d'entitémanager pour interroger, charger et sauvegarder des entités. Souvent, ce sont des singletons et les instances de gestionnaire d'entités à l'intérieur des DAOS sont locales au fil.

Si vous utilisez un cadre comme le printemps, la gestion des instances d'entitémanager et des transactions est entièrement automatique. Même avec EJB 3, bien que je n'ai pas utilisé cela sur un grand projet. Je suggérerais de lire le chapitre de la documentation de printemps sur Mappage d'objet-relation accès aux données. Même si vous ne vous retrouvez pas à l'aide de printemps dans votre application, le chapitre donne de bons conseils sur la manière de structurer votre application de manière superficielle qui sépare les préoccupations de persévérance des entités persistantes. Bonne chance!


1 commentaires

Je n'utilise pas le printemps et j'utilise Daos comme expliqué (les DAOS sont les classes méthodes *, mais elles utilisent tous le même contexte de persistance. Il est correct d'exécuter CreateCetityManager dans des amethods et également à Bmethods même s'ils utilisent le même contexte de persistance ??



-2
votes

Tout comme ça!

interface publique protocolldaoservice { xxx

}

la classe publique Protokelldaoimpl implémente protocolldaoservice { String final statique privé persistant_unit_name = "protocollmanager"; Entité privéManagerFactoryfactoryFactory; xxx

}


0 commentaires

1
votes

J'espère que cette photo répond à votre question. Entrez la description de l'image ici


0 commentaires