La Confusion entre JPA et Hibernate en cascade
Je suis en utilisant Hibernate 3.6 et avoir mon code annoté (par rapport à l'utilisation d'hibernate fichiers de mapping). J'ai couru dans la célèbre "problème" de l'utilisation de JPA en cascade des options qui ne sont pas compatibles avec Hibernate CascadeType (voir ce lien pour plus d'info http://www.mkyong.com/hibernate/cascade-jpa-hibernate-annotation-common-mistake/).
J'espérais obtenir un peu plus de précisions sur le problème. J'ai quelques questions:
1) Donc @Cascade({CascadeType.SAVE_UPDATE}) travaille pour saveOrUpdate(), mais ça s'applique aussi si j'utilise merge() ou persist()? ou dois-je utiliser tous les trois Hibernate CascadeTypes?
2) Comment puis-je décider d'utiliser JPA cascade options ou Hibernate @Cascade annotation à la place?
2) Il y a un "bug", déposée à l'encontre de ce en veille prolongée, mais les développeurs apparemment voir cela comme une documentation problème, (je suis pas du tout d'accord avec eux), et je ne vois pas de qui elle a été adressée dans ladite documentation. Quelqu'un sait pourquoi il est "normal" et pas un bug dans Hibernate JPA mise en œuvre?
Merci beaucoup à l'avance.
OriginalL'auteur Jay | 2010-12-27
Vous devez vous connecter pour publier un commentaire.
Ce comportement est documenté dans 11.11. La persistance Transitive.
Hibernate cascade types correspondent à des opérations individuelles, de sorte que vous besoin de tous les trois d'entre eux.
Dans la plupart des cas, vous avez besoin de
CascadeType.ALL
ou pas de cascade. Dans ce cas, JPA annotation est assez, depuis JPA estCascadeType.ALL
couvre toutes les Hibernate opérations. Sinon, si vous avez besoin de fine granularité de contrôle en cascade (et l'utilisation de HibernateSession
interface), vous avez besoin de Hibernate@Cascade
.Ce n'est pas un bug dans l'implémentation JPA, parce que si vous utilisez JPA est
EntityManager
tout fonctionne bien. Ce problème existe uniquement si vous combinez les annotations JPA Hibernate estSession
interface.2. Ce qui le dérange, la morve de moi - TOUT le monde doit travailler pour les deux, mais si vous n'utilisez pas TOUS, Hibernate n'est pas "intelligent" assez pour faire le mapping pour vous. Je vois également que rien dans la documentation Hibernate sur l'utilisation de @Cascade avec les Sessions Hibernate (et c'est pourquoi je pense que le rapport de bug est en cours de validité).
Mais merci BEAUCOUP pour la réponse!
Le point est que Hibernate agit comme une implémentation JPA lors d'un accès via
EntityManager
, si Hibernate est accessible viaSession
il agit sur son propre, mais il peut toujours utiliser les annotations JPA.OriginalL'auteur axtavt
De mise en veille prolongée documentation de référence
Si vous voyez CascadeType de la documentation, vous verrez que chaque style en cascade pour chaque session opération
Préfèrent utiliser simplement de l'APC de style en cascade lors de l'utilisation d'une plaine JPA application. Si l'utilisation d'Hibernate, préférez Hiberner de style en cascade
OriginalL'auteur Arthur Ronald