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

JDBC Java Discussion :

Problématique JPA multi BDD et tests


Sujet :

JDBC Java

  1. #1
    Membre actif Avatar de DrHelmut
    Homme Profil pro
    Software craftsman - JS, Java...
    Inscrit en
    Octobre 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Software craftsman - JS, Java...
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 113
    Points : 215
    Points
    215
    Par défaut Problématique JPA multi BDD et tests
    Bonjour à tous,

    ayant hérité d'une appli codée avec les pieds, j'ai décidé de tâcher d'améliorer au maximum le process qualité en injectant des données prédéfinie avant mes tests (et en supprimant après, classique en somme)
    Pour des raisons de coût, nos tests se font piur l'instant sur les données existantes, ce qui empêche par exemple la réalisatino de tests complets sur nos web services...

    Bref, ayant hérité d'une belle couche JPA que j'ai déjà décrassée autant que faire se peut, j'ai voulu utiliser HSQLDB comem base de test, permetant ainsi une vraie portabilité à mes tests.

    - Premier soucis : HSQLDB, peut être couplé avec JPA, ne gère pas le cas ou mes entités n'ont pas de foreign key, pourtant nullable ! (Cas d'une entité "Location" avec une relation récursive... aucun problème sous mysql..)
    => c'est moi qui ait bugué ou c'est un fonctionnement 'normal' ??

    - second soucis, ok HSQLDB ne gère pas les auto increments; qu'à cela ne tienne, j'ai généré un trigger pour mes tables.
    Là ou le bas blesse, c'est qu'il n'est visiblement pas possible de préciser dynamiquement quelle strategie passer à mes id auto-générés via l'annotation "@GeneratedValue" ... (c'est pour cela que je préfère les confs xml aux annotations)

    Bref, a prioi je vais passer par une autre base mysql pour faire mes tests proprements (via DBUnit) mais du coup, au revoir portabilité...

    Avez-vous déjà rencontré de telles problématiques ? Ai-je complètement bugué sur un point essentiel ou JPA est-il si contraignant que l'on doive oublier toute portabilité entre bdd ? Merci d'avance pour vos retours, et à bas les ORM ! ^^

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Euh, réponse rapide pour la seconde question, si HSQLDB gère un équivalent à l'auto increment (qui est une syntaxe spécifique à MySQL de souvenir).
    C'est fait de la même façon que sous postgres, en utilisant IDENTITY:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
     CREATE TABLE vals (id INTEGER GENERATED BY DEFAULT AS IDENTITY, data VARBINARY(2000))


    Pour la première, tu pourrais rephraser ton problème, car là je ne comprends pas des masses, même pour relation récursive tu peux avoir une foreign key.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Membre actif Avatar de DrHelmut
    Homme Profil pro
    Software craftsman - JS, Java...
    Inscrit en
    Octobre 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Software craftsman - JS, Java...
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 113
    Points : 215
    Points
    215
    Par défaut
    Merci pour ta réponse Sinok, mais le coup de la génération d'identity, j'avais capté et ce n'est pas ce que je veux : idéalement (mais j'ai abandonné) j'aurais voulu ne pas avoir à effectuer la moindre action manuelle, et être capable "à la volée" de migrer mon système sous mySQL sous du Oracle avec des séquences) ou autre système !

    Bref, avoir la même souplesse que sous spring avec conf xml + maven :p

    Pour info, mon entité récursive qui bugue sous HSQLDB :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long locationId;
     
    @Column(name = "LAST_UPDATE", nullable = false)
    @Temporal(value = TemporalType.TIMESTAMP)
    private Date lastUpdate;
     
    @ManyToOne(optional = true, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "PARENT_ID")
    private LocationEntity parent;
     
    @Column(name = "VALUE", nullable = false)
    private String value;
    Pour le coup, ça passait (je pouvais créé des Location sans "PARENT_ID") mais sous réserve de supprimer les contraintes sql... pas génial du tout pour ne pas dire nullissime...

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Le problème de base vient du fait qu'Identity et Sequence ne sont pas supportés par l'ensemble des SGBD.

    La seule solution portable totalement étant de passer par le generator Table et d'avoir une table qui maintient les ID.

    Ou alors de faire la conf via XML (orm.xml) et de swapper la conf lors du build suivant les systèmes avec des tâches ant ou un build maven associé.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  5. #5
    Membre actif Avatar de DrHelmut
    Homme Profil pro
    Software craftsman - JS, Java...
    Inscrit en
    Octobre 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Software craftsman - JS, Java...
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 113
    Points : 215
    Points
    215
    Par défaut
    Merci, tu confirmes mes doutes quand au manque de souplesse de JPA, mais en même temps c'est inhérent à tout ce qui est "configuration écrite dans le code" :p (c'est d'ailleurs pourquoi à titre personnel je décourage ce genre de pratique avec ma team)

  6. #6
    Membre confirmé
    Avatar de Khaled.Noordin
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 354
    Points : 497
    Points
    497
    Billets dans le blog
    1
    Par défaut
    Salut,
    ça doit pas être énorme de basculé de hsqldb à h2database, avec qui je n'ai jamais eu de soucis quand à son dialect hibernate pour ce qui est de l’incrémentation de clé primaire, et la syntaxe sql des deux sgbd doit être très voisine pour le cas ou il y ait besoin de charger des fichiers sql dans tes tests.
    Pour ce qui est de passer tes données d'un sgbd a l'autre(avec migration de données) en faisant toute confiance à jpa/hibernate et la portabilité des dialect, c'est risqué, cette migration ressemble plus a du batch processing avec un peu plus de filtre que juste le mappage ORM.

Discussions similaires

  1. problème requête BDD entre test local et test distant
    Par illidan05 dans le forum Administration
    Réponses: 1
    Dernier message: 02/07/2012, 11h28
  2. BDD pour tests
    Par nazoreen dans le forum MySQL
    Réponses: 2
    Dernier message: 07/10/2010, 23h28
  3. [Multi-BDD-MAJ] Comprehension du principe
    Par GarsDuCalvados dans le forum Access
    Réponses: 13
    Dernier message: 26/03/2007, 16h52
  4. pbl installation d'une bdd test
    Par maximus10 dans le forum Oracle
    Réponses: 4
    Dernier message: 18/01/2007, 23h57
  5. [Outils] Quelle stratégie pour des tests unitaires BDD
    Par hecatonchire dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 21/04/2006, 10h20

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