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 :

Modifier une entité sans reconstruire la table SQL


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Par défaut Modifier une entité sans reconstruire la table SQL
    Bonjour,

    Je souhaiterais ajouter à une entité A une liaison @OneToMany vers une nouvelle entité B.
    Pour créer B sans supprimer mes tables, je n'ai fait qu'une relation unidirectionnelle côté B (un @ManyToOne vers A).
    La table s'est bien créée mais lorsque que j'ai ajouté le @OneToMany côté A, impossible de lancer l'application.

    Exception:
    [class A] uses a non-entity [class B] as target entity in the relationship attribute [private java.util.List A.listeB].

    Pourtant je pensais que cette bidirectionnalité ne modifiait pas la table côté A.
    Faut t-il vraiment que je supprime la table de A pour ensuite la recréer?

    Pouvez-vous m'aider?
    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Par défaut
    J'ai dumpé la table dans un fichier. Ensuite j'ai supprimé la table de la base pour enfin la recréer (mode create du persistance.xml) et réinjecter les données du dump.
    Malheureusement les données ne sont plus accessibles maintenant...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 104
    Par défaut
    au dessus de classB t'as bien l'annotation @entity ?

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Par défaut
    Oui oui bien sur.
    En gros le problème est de savoir comment ajouter des liaisons à une entité sans avoir à reconstruire la table et perdre les données.
    A la limite je vais exposer mon problème un peu mieux:

    J'ai une entité Utilisateur héritant de Personne. Je veux rajouter une liste d'entités Connexion à un utilisateur. Du point de vue objet je rajoute un @OneToMany côté Utilisateur mais cela ne devrait rien changer au niveau relationnel (aucune nouvelle colonne dans la table).

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Par défaut
    Un petit up si quelqu'un capte mon problème... En gros ça ne plaît pas à JPA que l'on modifie les tables à la main lorsque l'on modifie les entités. Il faut à chaque fois tout reconstruire. De ce fait, je n'arrive pas à avoir un logiciel évolutif sans perdre les données...
    De plus, même en faisant des dumps, en recréant toutes les tables de la base et en réinjectant les données, JPA ne les retrouve plus (quand je fait un "select" par exemple). Serait-ce un problème avec JDBC?
    Je tourne un peu en rond la lol.

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par saveriu Voir le message
    Un petit up si quelqu'un capte mon problème... En gros ça ne plaît pas à JPA que l'on modifie les tables à la main lorsque l'on modifie les entités. Il faut à chaque fois tout reconstruire. De ce fait, je n'arrive pas à avoir un logiciel évolutif sans perdre les données...
    De plus, même en faisant des dumps, en recréant toutes les tables de la base et en réinjectant les données, JPA ne les retrouve plus (quand je fait un "select" par exemple). Serait-ce un problème avec JDBC?
    Je tourne un peu en rond la lol.
    si n'est ni JPA en lui-même, ni JDBC qui peuvent être la source du problème…

    vous avez dû vous trompez dans les modifications faites à la main…
    le meilleur moyen de comprendre votre erreur est de comparer les 2 schémas : ce que vous avez fait à la main et ce que JPA génère…
    (il vous suffit de changer de DB de test…)

    commencez par vérifier la contrainte FOREIGN KEY entre B et A…
    sans plus d'infos de votre part, tout ce qui concerne le lien entre A et B reste quand même le premier suspect…
    (la contrainte en premier lieu mais aussi le type du champ…)

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Par défaut
    En fouillant bien l'exception, et étant donné que j'ai deux unités de persistance dans persitence.xml. J'ai constaté que la deuxième unité n'était pas mis à jour avec la nouvelle entité B.
    L'exception venait du préchargement de la deuxième unité alors que je voulais utiliser la première.
    En remettant à jour la deuxième unité de persistance, je n'ai plus eu de problèmes.
    Merci beaucoup

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/03/2013, 19h58
  2. Modifier une entité sans la persister
    Par Ghurdyl dans le forum JPA
    Réponses: 8
    Dernier message: 13/09/2012, 17h36
  3. Réponses: 9
    Dernier message: 15/03/2007, 00h02
  4. Modifier une page sans la recharger...
    Par Ylias dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 10/05/2006, 11h06
  5. Modifier une requête dans toutes ces tables...
    Par SnickeursMan dans le forum Requêtes
    Réponses: 6
    Dernier message: 14/12/2005, 13h08

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