IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

Annotations ou orm.xml ?


Sujet :

JPA Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2014
    Messages : 4
    Points : 8
    Points
    8
    Par défaut Annotations ou orm.xml ?
    Bonjour,

    Dans les ORM comme JPA (Hibernate, etc.), il existe 2 manières de décrire le mapping entre une classe Java et une table dans un BD. On peut exprimer la correspondance en annotant directement les champs (ou les getters), ou bien on peut décrire la correspondance dans un fichier xml à part. En l'occurrence, dans JPA, il s'appelle orm.xml.

    Personnellement, je préfère centraliser les mapping dans orm.xml. Pour deux raisons, la première est que les classes métiers restent intactes, en tout cas n'ont aucune dépendance vers l'API. Cela en facilite leur écriture, leurs tests, et leur réutilisabilité. La seconde raison est, d'après ce que j'ai lu (mais je ne l'ai jamais réellement vérifié par mon expérience), est que orm.xml permet d'accéder à plus de fonctionnalités que par les annotations.

    Mais voilà, l'écrasante majorité des exemples et autres tuto utilisent essentiellement les annotations. Donc, je doute… Mes raisons sont-elles bien fondées ? Y-a-t'il des avantages dans les annotations qui m'échappent ?

    J'espère que parmi les lecteurs expérimentés de ce post, certains pourront m'éclairer.

    Au fait, je suis enseignant... Je maitrise normalement ces technos et mais je souhaite orienter mon cours non pas vers ce qui est spécialement facile ou fun (ça je sais faire!), mais vers ce qui sera le plus utile pour les étudiants lorsqu'ils seront intégrés dans les équipes de développement pro.

    Merci d'avance

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    On a le choix, ça va un peu dépendre du fait qu'il y a des adaptations à faire localement pour tel ou tel client ou pour telle ou telle base de données.
    Là, il vaut mieux utiliser les fichiers externes, ça évite d'avoir à recompiler les classes.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    Citation Envoyé par Brett.Sinclair Voir le message
    Personnellement, je préfère centraliser les mapping dans orm.xml. Pour deux raisons, la première est que les classes métiers restent intactes, en tout cas n'ont aucune dépendance vers l'API. Cela en facilite leur écriture, leurs tests, et leur réutilisabilité. La seconde raison est, d'après ce que j'ai lu (mais je ne l'ai jamais réellement vérifié par mon expérience), est que orm.xml permet d'accéder à plus de fonctionnalités que par les annotations.
    Le fait que les annotations soient réparties sur plusieurs classes est un faut problème quand tu identifies clairements les packages pour ton modèle BDD ! De plus ton IDE est en mesure de clairement identifier les classe annotées...
    Multiplier les sources c'est multiplier le risque de bug.... IMHO, l'ajout un fichier source pour le mapping est potentiellement une source de problème supplémentaire.
    Avec du mapping direct la correspondance entité <> table est, IMHO, plus lisible car directe. D'aiileurs pour les cas simples tu n'as même pas besoin d'annotation sur tes champs...
    Réutilisabilité quelle réutilisabilité ? Sauf cas simple ton modèle BDD ne sera pas ton modèle business... Donc ton modèle BDD ne devrait te servir que pour la persistence !
    Rajouter des annotation (quand c'est nécessaire) est-ce plus compliqué que d'écrire un mapping XML ? En quoi les annotations gènent pour les tests ?
    As-tu pensé à la validation de tes entités... on le fait aussi par annotation !
    Je ne vois pas d'exemple où les annotations limitent la définition d'un schéma...

    De manière générale ta question rejoint la discussion XML vs annotation : Tu remarqueras que tous les APIs (JavaEE, Spring, ...) propose toutes, de version en version, de réduire au maximum la configuration XML et sa verbosité au profit des annotations !

    De mon point de vue, un fichier de mapping XML ne se justifie que dans le cas d'une maintenance d'un projet dont les auteurs initiaux on fait le choix de se passer des annotations.

    a+
    Philippe

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2014
    Messages : 4
    Points : 8
    Points
    8
    Par défaut
    Merci Philippe! Je me rallie à cette opinion. D'autant que les spécifications de JPA sont clairement orientées vers l'usage des annotations. Tu as par ailleurs raison sur les tests. L'un n'empêche pas l'autre. Je suis donc convaincu sur l'approche à donner à mes cours.

    A+

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Et bien si vous trouvez que modifier une classe pour le cas d'une base de données spécifique n'est pas un souci, je dirais que ça vous regarde, mais en ce qui me concerne, dans le cadre d'un progiciel, le mapping externe reste et de loin la solution la plus souple.

    Pour ne citer qu'un exemple d'adaptation récurrente, on prendra le cas d'un boolean. Autant le type existe sur une base MySql, autant il n'existe pas sur du DB2 ou Oracle. Pourtant, d'un point de vue de l'entity, il est préférable de le déclarer comme Boolean.
    Bref, chacun sa vison
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    A problème récurrent solution récurente : pour le mapping de booleen, enum ou tout autre type JPA 2.1 permet d'appliquer une fonction de mapping sous forme d'annotation ! Pour JPA <2.1 les implementatione comme Hibernate ou EclipseLink fournissent le même type de solutions mais non standard !

    Après biensur si on change de DB toutes les semaines il sera préférable de définir le mapping à l'extérieur de la classe

    Effectivement chacun sa vision... comme je le disais plous haut on pourrais avoir la même type discussion avec le fichier de configuration de Spring par exemple !

    a+
    Philippe

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.x] comprendre : entité + model + orm.xml
    Par walter75 dans le forum Symfony
    Réponses: 3
    Dernier message: 25/04/2014, 13h53
  2. [Framework] Utiliser un service instancié via annotation dans fichier XML
    Par bleach1234 dans le forum Spring
    Réponses: 0
    Dernier message: 03/08/2011, 20h19
  3. [Framework] [Annotations] Problème applicationContext.xml
    Par kilicool dans le forum Spring
    Réponses: 3
    Dernier message: 18/09/2009, 14h28
  4. [EJB3 Entity] Convertion d'annotations EJB3 dans un fichier ejb-jar.xml
    Par kafana dans le forum Java EE
    Réponses: 1
    Dernier message: 27/02/2009, 11h03
  5. Réponses: 7
    Dernier message: 07/01/2008, 15h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo