web-dev-qa-db-fra.com

Implémentations JPA - Laquelle est la meilleure à utiliser?

J'ai utilisé les implémentations JPA suivantes:

  1. Hiberner,
  2. Toplink,
  3. OpenJPA

Chacun d'eux a ses propres forces et faiblesses. J'ai trouvé Hibernate le plus avancé des trois, sauf qu'il mélangeait certaines de ses propres améliorations avec JPA, ce qui rendait difficile le passage à d'autres fournisseurs. Plus important encore, son analyseur de requêtes était beaucoup plus indulgent lors de l'interprétation de JPA. Ils rendent un peu difficile l'obtention des bibliothèques correctes pour prendre en charge l'hibernation car j'ai trouvé que c'était une mission d'essayer d'obtenir les bonnes versions de toutes les dépendances.

Toplink était ok mais on a le sentiment qu'il est légèrement paralysé car il semble que Oracle veuille que vous utilisiez/achetiez? leur bibliothèque plus avancée. Essayer de le télécharger était également une mission car vous devez l'installer en exécutant un fichier jar. J'ai trouvé qu'il implémentait uniquement la spécification JPA de base. La raison pour laquelle je l'ai utilisé était hibernate utilise beaucoup de bibliothèques qui sont couramment utilisées dans d'autres projets open source que l'on rencontrait souvent des problèmes de classloarder, en particulier lors de l'utilisation de JBoss

OpenJPA - Celui-ci a de loin la meilleure documentation et est facile à télécharger et à utiliser, mais il semble que ce soit très buggé. Peut-être que c'est juste mon code mais le code que j'ai trouvé une utilisation plus avancée comme les relations OneToMany avec CascadeType.all set ne semblait tout simplement pas fonctionner. Certes, mon code était peut-être erroné et je n'ai pas eu le temps de tester un cas propre, mais de nombreux incidents comme celui-ci me font peur de l'utiliser. J'espère vraiment que ça ira mieux. Ses messages d'erreur sont souvent inutiles pour aider à résoudre le problème.

Quelles autres bibliothèques les gens ont-ils utilisées et lesquelles préfèrent-elles et pourquoi?

33
mxc

J'ai eu les mêmes conclusions sur ces implémentations.

  1. OpenJPA était/semblait buggé

  2. Hibernate avait des tonnes de bibliothèques et semblait avoir du mal à pas paresseux à tout charger.

  3. Toplink a fini par être mon choix. Il n'était pas aussi flexible qu'Hibernate, mais cela fonctionne et je n'ai pas besoin d'installer commons-logging .

Celui que j'essaierais ensuite est JPOX, qui a récemment été renommé datanucleus .

18
Clint

Personnellement, je ne pense pas qu'OpenJPA soit encore assez mature. Il existe d'autres bibliothèques open source qui sont plus matures et je préfère les utiliser. Ce sont ceux que je considérerais dans l'ordre:

  1. Hiberner. Hibernate existe depuis longtemps et a vraiment ouvert la voie à l'ORM en Java. Le seul problème que j'ai avec Hibernate est la licence. Il est sous licence LGPL, ce qui peut provoquer le tortillement de certaines sociétés commerciales (pour des raisons que je n'entrerai pas ici). Quoi qu'il en soit, si LGPL est un problème pour vous, il est probablement bon de rester clair.

  2. EclipseLink. Quelques informations sur eclipselink. Toplink Essentials était la version gratuite d'Oracle de leur implémentation JPA. EclipseLink provient de Toplink, la mise en œuvre JPA complète d'Oracle. EclipseLink va être le fournisseur JPA 2.0 pour Glassfish v3.0, il semble donc que tout s'éloigne de Toplink Essentials et d'EclipseLink. Bien que la version EclipseLink ne soit que 1.0.2, le produit existe depuis longtemps sous d'autres noms.

Un projet sur lequel je travaille est actuellement sur Toplink Essentials mais nous prévoyons de passer à Eclipselink sous peu. Hibernate était sorti pour les problèmes de licence que j'ai mentionnés plus tôt.

7
Chris Dail

OpenJPA est connu sous le nom de Kodo, c'est ce que BEA a acheté il y a assez longtemps. Kodo implémentait JDO et maintenant JPA. De plus, nous utilisons OpenJPA de manière assez intensive. Ainsi, je ne dirais pas que ce n'est pas mature. C'est très bien Cependant, je suggérerais d'utiliser Hibernate, à savoir, les emballages JPA autour d'Hibernate.

Raison? 1) JPA est très, très similaire à Hibernate 2) De nombreux postes ont des exigences Hibernate. Il vaut mieux se pencher sur les produits grand public ... en gros

4
kdxx