5LCC] Outils ORM : Hibernate vs TopLink, ou autres? Best one is ...?

403 views
Skip to first unread message

Benito d'Almeida

unread,
Jul 9, 2012, 7:45:02 AM7/9/12
to lescast...@googlegroups.com
Bonjour,
Je me suis toujours demandé pourquoi Hibernate était l'ORM le plus utilisé? Est ce parce que c'est le meilleur, en terme de 
Productivity, Maintainability and Portability.
ou parce qu'il y avait de bon commerciaux, et du coup, c'est devenu le leader?
Par contre Toplink, (now eclipse Link), fait il le poids? face à Hibernate?
Les autres outils (ibatis, jpa, spring orm ..): qui pourrait dire vraiment ce que ça vaut?

Merci d'avance

Cordialement

Emmanuel Lécharny

unread,
Jul 9, 2012, 8:04:28 AM7/9/12
to lescast...@googlegroups.com
Le 7/9/12 1:45 PM, Benito d'Almeida a écrit :
Pour info, IBatis est mort. C'est devenu MyBatis, après sa sortie de
Apache.


--
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com

Moandji Ezana

unread,
Jul 9, 2012, 8:23:52 AM7/9/12
to lescast...@googlegroups.com
2012/7/9 Benito d'Almeida <benito....@gmail.com>

Les autres outils (ibatis, jpa, spring orm ..)

JPA est une interface standard dont Hibernate et EclipseLink sont des implémentations (EclipseLink est l'implémentation de référence, il me semble).

Spring ORM (ou Spring Data?), c'est une API unificatrice au-dessus de plusieurs autres API, notatmment NoSQL.

J'aime bien développer avec Ebean, que j'utilise depuis peu avec Play!, mais je ne l'ai pas encore utilisé en production.

Moandji

Nicolas Labrot

unread,
Jul 9, 2012, 8:27:51 AM7/9/12
to lescast...@googlegroups.com
Tu peux ajouter à la liste QueryDSL


2012/7/9 Benito d'Almeida <benito....@gmail.com>
Bonjour,

--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes lescastcodeurs.
Pour envoyer un message à ce groupe, adressez un e-mail à lescast...@googlegroups.com.
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse lescastcodeur...@googlegroups.com.
Pour plus d'options, consultez la page de ce groupe : http://groups.google.com/group/lescastcodeurs?hl=fr

Nicolas Labrot

unread,
Jul 9, 2012, 9:11:46 AM7/9/12
to lescast...@googlegroups.com
Qu'est ce que cherche à faire le développeur ?

Le moins de queries possible et quand il doit en taper, des queries type safe.

En ce sens QueryDSL et Spring JPA sont deux très bonnes librairies.




2012/7/9 Nicolas Labrot <nit...@gmail.com>

Moandji Ezana

unread,
Jul 9, 2012, 9:19:37 AM7/9/12
to lescast...@googlegroups.com
2012/7/9 Nicolas Labrot <nit...@gmail.com>

Le moins de queries possible et quand il doit en taper, des queries type safe.

Enfin, quand les queries typesafe ressemblent à la Criteria API de JPA2, ça me dérange moins de sacrifier la type safety...

Moandji

Nicolas Labrot

unread,
Jul 9, 2012, 11:30:50 AM7/9/12
to lescast...@googlegroups.com
Tu préfères les constructions de requêtes par concaténation de chaine ? ;)


2012/7/9 Moandji Ezana <mwa...@gmail.com>

--

Nicolas Delsaux

unread,
Jul 9, 2012, 11:36:24 AM7/9/12
to lescast...@googlegroups.com


2012/7/9 Nicolas Labrot <nit...@gmail.com>

Tu préfères les constructions de requêtes par concaténation de chaine ? ;)

Bon, c'est pas pour critiquer pour le plaisir, mais t'avoueras que construire une librairie de recherche où tu te contente de claquer les constructs SQL dans du code Java, c'est un peu frustre.
Personnellement, pour moi (qui n'aime pas SQL) c'est en tout cas une sacrée gêne. je préfère largement écrire la recherche sous forme de critères sur mes objets et laisser l'ORM se démerder pour écrire la meilleure recherche possible.
<pub>
C'est ce que j'ai essayé de faire dans gaedo, un petit outil raisonnablement polyvalent, qui produit des syntaxes de recherche comme

Or example

To check if login is either "toto" or "tata", one could write
User u = findOneWithLoginEqualsToOrLoginEqualsTo("toto", "tata");

or prefer the longer
User u = userService.find().matching(new QueryBuilder<UserInformer>() {

@Override
public QueryExpression createMatchingExpression(UserInformer object) {
return Expression.or(
object.getLogin().equalsTo("toto"),
object.getLogin().equalsTo("tata"));
}
}).getFirst();

(tiré de https://github.com/Riduidel/gaedo#or-example) qui marche avec n'importe quel backend.
</pub>

Mais apparement, la voie de l'abstraction de la recherche (pour laisser de meilleurs que moi faire le sale boulot) n'a pas l'air de plaire aux gens, qui semblent vouloir continuer à maîtriser leur SQL. Dont acte.

--
Nicolas Delsaux

Nicolas Labrot

unread,
Jul 9, 2012, 11:46:02 AM7/9/12
to lescast...@googlegroups.com
Si je comprend bien, c'est +/- ce que fait Spring JPA

eg (http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/)
public interface PersonRepository extends Repository<User, Long> {

  List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);
}
Il génére le bytecode et la requête correspondante par analyse du nom de la méthode


2012/7/9 Nicolas Delsaux <nicolas...@gmail.com>

David Screve

unread,
Jul 9, 2012, 11:48:05 AM7/9/12
to lescastcodeurs
Et db4o, ou une vraie base de données objet, c'est pas plus adapté ?

David

On 9 juil, 17:46, Nicolas Labrot <nith...@gmail.com> wrote:
> Si je comprend bien, c'est +/- ce que fait Spring JPA
>
> eg (http://static.springsource.org/spring-data/data-jpa/docs/current/refe...
> )
>
> *public interface PersonRepository extends Repository<User, Long> {
>
>   List<Person> findByEmailAddressAndLastname(EmailAddress
> emailAddress, String lastname);
>
> }*
>
> Il génére le bytecode et la requête correspondante par analyse du nom de la
> méthode
>
> 2012/7/9 Nicolas Delsaux <nicolas.dels...@gmail.com>
>
>
>
>
>
>
>
>
>
> > 2012/7/9 Nicolas Labrot <nith...@gmail.com>
>
> >> Tu préfères les constructions de requêtes par concaténation de chaine ? ;)
>
> >> Bon, c'est pas pour critiquer pour le plaisir, mais t'avoueras que
> > construire une librairie de recherche où tu te contente de claquer les
> > constructs SQL dans du code Java, c'est un peu frustre.
> > Personnellement, pour moi (qui n'aime pas SQL) c'est en tout cas une
> > sacrée gêne. je préfère largement écrire la recherche sous forme de
> > critères sur mes objets et laisser l'ORM se démerder pour écrire la
> > meilleure recherche possible.
> > <pub>
> > C'est ce que j'ai essayé de faire dans gaedo, un petit outil
> > raisonnablement polyvalent, qui produit des syntaxes de recherche comme
>
> > Or example
>
> > To check if login is either "toto" or "tata", one could write
> > User u = findOneWithLoginEqualsToOrLoginEqualsTo("toto", "tata");
>
> > or prefer the longer
> > User u = userService.find().matching(new QueryBuilder<UserInformer>() {
>
> > @Override
> > public QueryExpression createMatchingExpression(UserInformer object) {
> > return Expression.or(
> > object.getLogin().equalsTo("toto"),
> > object.getLogin().equalsTo("tata"));
> > }
> > }).getFirst();
>
> > (tiré dehttps://github.com/Riduidel/gaedo#or-example) qui marche avec

Nicolas Delsaux

unread,
Jul 9, 2012, 11:51:08 AM7/9/12
to lescast...@googlegroups.com


2012/7/9 Nicolas Labrot <nit...@gmail.com>

Si je comprend bien, c'est +/- ce que fait Spring JPA

C'est à peu près ça ... sans Spring :-p 
Cela dit, que ça s'appelle Spring ou autre, c'est aussi pratique en Java que ça a pu l'être jadis en Ruby/Groovy, à une différence près : comme la méthode doit être déclarée dans une interface, tout le monde la voit et peut donc la réutiliser (parce qu'abuser de method_missing pour créer du code, je trouve que c'est un peu mal). Autrement dit, c'est vachement chouette de ne pas avoir à se poser la question de la requête effectivement exécutée, même si bien sûr on peut se poser des questions de performances et de N+1 requêtes. Mais bon, pour du code non critique, ça vaut largement le coup, je trouve.

--
Nicolas Delsaux

tvi...@onyme.com

unread,
Jul 9, 2012, 2:20:28 PM7/9/12
to lescast...@googlegroups.com
Un benchmark des implémentations JPA sur plusieurs systèmes de base de
données
http://www.jpab.org/Home.html (je crois que j'avais déjà donné ce lien,
non?)

C'est très complet et mis à jour (dernière mise à jour en Fevrier
2012). C'est publié par la société ObjectDB qui édite une bdd orientée
objet éponyme ;-) mais c'est clairement indiqué dans l'intro. Donc
forcément, l'impl JPA de ObjectDB sur leur base éclate toutes les autres
mais y a des use case qui ne sont pas couvert par leurs produits...

Sinon EclipseLink est systématiquement un poil devant Hibernate en
terme de perfs (d'après ce benchmark), par contre le framework est un
peu moins riche en terme de fonctionnalités.

Pourquoi Hibernate est si populaire? Ben c'est le framework qui a
ouvert la voie et a conduit à la création de la spec Java Persistence
API selon moi (et là je demande la caution du public, parce que je ne
suis pas sûr de cela).
Par rapport aux messages que j'ai lu sur ce thread sur l'api Criteria
(qui est une des fonctionnalités): c'est clair que c'est pas la plus
sexy (même si j'ai pu la défendre dans d'autre thread) et la plus
intuitive => productivity--, mais maintenance++ selon moi.
Par exemple Hibernate propose une autre API Criteria qui est plus sympa
déjà.

En ce qui concerne la portabilité, faut définir ce que tu entends par
là :
- Est-ce par rapport au SGBDR?
- Est-ce par rapport à ton application (genre tu veux savoir si y a
vraiment 0 adhérence à l'implémentation JPA que tu choisis)?
- autre?

Thibaud

>
> Merci d'avance
>
> Cordialement

ehsavoie

unread,
Jul 10, 2012, 3:05:41 AM7/10/12
to lescast...@googlegroups.com
Spring-JPA (anciennement Hades) ne necessite plus spring car il
supporte maintenant CDI (ce que devrait faire Spring bientot selon les
rumeurs).

----------
Emmanuel Hugonnet
http://www.ehsavoie.com
http://twitter.com/ehsavoie


2012/7/9 <tvi...@onyme.com>:

Moandji Ezana

unread,
Jul 10, 2012, 3:18:27 AM7/10/12
to lescast...@googlegroups.com
2012/7/9 Nicolas Labrot <nit...@gmail.com>

Tu préfères les constructions de requêtes par concaténation de chaine ? ;)

Non, mais l'API Criteria est particulièrement cryptique. Les méthodes du style eq("maPropriété") de l'ancienne API Criteria de Hibernate ou d'Ebean ne sont pas très typesafe, mais au moins c'est simple. Mais même avec les mappings JPA, on perd un peu de typesafety, avec les mappedBy dans les associations, par exemple.

Moandji

Nicolas Labrot

unread,
Jul 10, 2012, 3:26:02 AM7/10/12
to lescast...@googlegroups.com
Parce que maPropriete.eq("valeur") est plus compliqué que eq("maPropriete", valeur) ?




2012/7/10 Moandji Ezana <mwa...@gmail.com>

--

ehsavoie

unread,
Jul 10, 2012, 3:44:08 AM7/10/12
to lescast...@googlegroups.com

Ivan A. Tamayo

unread,
Jul 10, 2012, 5:09:43 AM7/10/12
to lescast...@googlegroups.com
Je suis en train d'utiliser Spring Data JPA + Hibernate et je le trouve pas mal du tout...

Clement Escoffier

unread,
Jul 13, 2012, 1:16:40 AM7/13/12
to lescast...@googlegroups.com
Bonjour,

Un peu en retard par rapport au thread, mais j'aime bien datanucleus…. Alors c'est peut être pour son support OSGi, mais pas seulement. Le fait de choisir JDO ou JPA est sympa, car perso j'aime beaucoup JDO (meme si c'est pas très usité).  Ils ont aussi un support MongoDB, mais c'est assez expérimental. 

Clement
Reply all
Reply to author
Forward
0 new messages