web-dev-qa-db-fra.com

Hibernate ou EclipseLink pour JPA?

Je me demandais si quelqu'un avait de l'expérience avec la mise en œuvre JPA2.0 de l'un de ces cadres? Surtout avec Spring3.x qui est livré avec le support EclipseLink.

Utilisez-vous l'un de ces cadres et JPA2.0 pour la production? Des problèmes graves?

33
Ta Sas

À mon humble avis, il est toujours préférable d'utiliser une API standard lorsque cela est possible. Votre propre exemple le montre parfaitement. Vous avez pu essayer votre code identique sur deux fournisseurs lorsque l'un n'a pas fonctionné comme prévu. Le passage à une API native vous empêche de le faire.

Si vous utilisez EclipseLink en tant que fournisseur JPA 2.0, utilisez-le. Si vous rencontrez un problème, signalez un bogue EclipseLink et obtenez de l'aide sur ce forum ou sur les forums et les groupes de discussion EclipseLink.

20
Peter Krogh

EclipseLink est plus conforme aux normes, car il s'agit de l'implémentation de référence pour JPA 2, Hibernate a quelques problèmes de conformité, mais est plus mature.

L'un des principaux avantages d'EclipseLink est que vous pouvez appeler des fonctions SQL natives directement dans vos requêtes JPQL. À Hibernate, ce n'est pas directement possible.

Mais Hibernate a une plus grande communauté, une meilleure documentation et aussi de meilleurs messages d'erreur.

26
Timo Westkämper

D'après mon expérience, avec Java Perf Profiling. Mes applications construites à l'aide d'Eclipselink semblent beaucoup plus performantes qu'avec Hibernate à la fois dans l'insertion et la récupération de données. Hibernate est cependant plus largement utilisé et fournit un plus grand forum pour le soutien.

En production, je prendrai simplement Hibernate pour cette raison.

8
Tunde Pizzle

Il suffit de choisir et de s'en tenir à un. Les normes ne sont que dans les directives finales et chaque implémenteur peut implémenter ou ne pas appliquer les normes en conséquence.

par exemple.

  • EclipseLink a des problèmes avec quelque chose de basique comme JPA @Converters bien que supposément récemment corrigé via IBM http://www-01.ibm.com/support/docview.wss?uid=swg1PI73277

  • L'implémentation JPQL d'Hibernate ne comprend pas les valeurs booléennes qui se tiennent d'elles-mêmes, plus précisément j'ai dû changer mon JPQL pour dire

    from Participant p where not p.cancelled

    à

    from Participant p where p.cancelled = false

L'autre chose est que vous construisez des choses au printemps et vous allez probablement faire l'approche incorrecte mais courante de changer le chargeur de classe en PARENT_LAST ordre afin que vos classes soient utilisées plutôt que les serveurs d'applications.

Si vous prévoyez de faire la bonne chose et d'utiliser le JPA fourni avec le serveur d'applications, soyez un peu méfiant, car l'implémentation de votre serveur d'applications peut être boguée.

Au niveau des transactions, votre application, en particulier Spring doit gérer les choses pour vous.

1