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

Hibernate Java Discussion :

[debutant] Hibernate : table non crée


Sujet :

Hibernate Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut [debutant] Hibernate : table non crée
    Bonjour,
    j'ai une erreur que je ne comprends pas vraiment, j'ai réalisé 2 fichiers XML donc pour a priori créer deux tables : RIGHT et RIGHT_ITEM
    le table RIGHT possedent une liste d RightItem :
    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
     
    <hibernate-mapping package="dsi.identification">
            <class name="Right" table="RIGHTS" discriminator-value="R">
                    <id name="id" column="uid" type="long" unsaved-value="null">
                            <generator class="hilo"/>
                    </id>
     
                    <property  name="name" column="NAME" type="string"/>
                    <property  name="enable" column="ENABLE" type="boolean"/>
     
    	<list  name="rightItems" cascade="save-update">
    	      <key column="uid"/>
    	      <index column = "index"/>
    	      <one-to-many class="RightItem"/>
     	</list>	     
           </class>
    </hibernate-mapping>
    et voici le code du fichier XML de la classe RightItem :

    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
    18
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
            "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
     
    <hibernate-mapping package="dsi.identification">
     
            <class name="RightItem" table="RIGHT_ITEM" discriminator-value="I">
                    <id name="id" column="rightitem_uid" type="long" unsaved-value="null">
                            <generator class="hilo"/>
                    </id>
     
                    <property  name="name" column="NAME" type="string"/>
                    <property  name="enable" column="ENABLE" type="boolean"/>
     
            </class>
    </hibernate-mapping>
    et donc quand je sauvegarde mon droit : j'ai l'erreur suivante :

    org.hibernate.exception.SQLGrammarException: could not insert: [dsi.emc.pac7000.core.identification.RightItem]
    at org.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:70)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1869)
    ....
    Caused by: java.sql.BatchUpdateException: La table 'pac7000_1.right_item' n'existe pas
    at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:894)
    at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:57)
    at org.hibernate.jdbc.BatchingBatcher.addToBatch(BatchingBatcher.java:33)
    at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1853)
    ... 41 more

    j'ai essyé un autre type de liste, bag, mais avec celle ci j'ai un autre style d'erreur, deja voila la syntase que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <bag  name="rightItems" inverse="false" cascade="delete-orphan">
    	<key column="uid"/>
    	<one-to-many class="RightItem"/>
    </bag>
    et voila l'erreur :


    org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: dsi.emc.pac7000.core.identification.RightItem
    at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:216)
    at org.hibernate.collection.AbstractPersistentCollection.getOrphans(AbstractPersistentCollection.java:697)
    at org.hibernate.collection.PersistentBag.getOrphans(PersistentBag.java:116)
    at org.hibernate.engine.CollectionEntry.getOrphans(CollectionEntry.java:311)
    at org.hibernate.engine.Cascades.deleteOrphans(Cascades.java:942)
    at org.hibernate.engine.Cascades.cascadeCollection(Cascades.java:926)
    at org.hibernate.engine.Cascades.cascadeAssociation(Cascades.java:792)
    at org.hibernate.engine.Cascades.cascade(Cascades.java:720)
    at org.hibernate.engine.Cascades.cascade(Cascades.java:847)
    at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:363)
    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265)
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:160)
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:108)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184)
    at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173)
    at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:481)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:476)
    ...


    si quelqu'un peut m'expliquer ce qui ne va pas dans un des 2 cas je l'en remercie d'avance.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Par défaut
    Bonjour,

    il y a une contradiction dans les traces que tu donnes

    trace Hibernate
    dsi.emc.pac7000.core.identification.RightItem

    mapping
    dsi.identification.RightItem

    Quel est le bon chemin de ta classe ?

  3. #3
    Membre expérimenté
    Inscrit en
    Septembre 2003
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 174
    Par défaut
    Salut,

    A priori, la deuxième erreur est due au fait que tu essaies de sauver un objet qui pointe sur un autre objet qui n'a pas été sauvé.

    Je pense qu'il faut que tu changes dans ton mapping delete-orphan par all-delete-orphan pour que les RIGHT_ITEM soient sauvés en cascade.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <bag  name="rightItems" inverse="false" cascade="all-delete-orphan"> 
       <key column="uid"/> 
       <one-to-many class="RightItem"/> 
    </bag>
    sylvain_2020

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    Citation Envoyé par Pietra
    Bonjour,

    il y a une contradiction dans les traces que tu donnes

    trace Hibernate
    dsi.emc.pac7000.core.identification.RightItem

    mapping
    dsi.identification.RightItem

    Quel est le bon chemin de ta classe ?
    désolé j'ai voulu les racourcir pour mettre sur le post, et je ne l'ai pas fais partout.....

    sinon, ouis sylvain je me suis rendu compte que le pb venait du fait que mes RightItem n'etait pas sauvegarder, je teste te solution de suite...
    merci a vous deux

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    et cela marche merci beaucoup...

    juste une derniere question quelle est la différence entre bag et List ? car moi j'utilise des List dans mes classes, cela ne posera pas de probleme si je prends des <bag> pour le fichier XML?

  6. #6
    Membre expérimenté
    Inscrit en
    Septembre 2003
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 174
    Par défaut
    Citation Envoyé par lilou77
    juste une derniere question quelle est la différence entre bag et List ? car moi j'utilise des List dans mes classes, cela ne posera pas de probleme si je prends des <bag> pour le fichier XML?
    bag est une collection non ordonnée d'objets alors que list est ordonnée et doit avoir un index. Le choix dépend donc de l'utilisation que tu fais de la liste.

    sylvain_2020

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    merci pour ta reponse, le truc c'est que au debut mon appli recupere des info, et a la fin les sauvegarde, donc pour moi cela n'a pas d'importance qu'il soit ordonnée ou pas, si ma liste a un élément en plus il sera sauvegarder normalement.

    c'est peut etre important si on veut récupérer un element pendant...

    c'est ca j'ai compris ?

  8. #8
    Membre expérimenté
    Inscrit en
    Septembre 2003
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 174
    Par défaut
    Citation Envoyé par lilou77
    merci pour ta reponse, le truc c'est que au debut mon appli recupere des info, et a la fin les sauvegarde, donc pour moi cela n'a pas d'importance qu'il soit ordonnée ou pas, si ma liste a un élément en plus il sera sauvegarder normalement.

    c'est peut etre important si on veut récupérer un element pendant...

    c'est ca j'ai compris ?
    Je pense que c'est surtout important si lorsque tu récupères la liste, tu souhaites que ses éléments soient dans le même ordre que lorsque tu l'as sauvegardée. Le "problème" avec les list c'est qu'il faut gérer toi-même les index.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    ok, merci pour ta reponse, je vois ce que tu veux dire.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    j'ai une derniere question, ce n'est plus avec les liste, mais je n'arrive pas a comprendre quelle associations utilisé :

    j'ai une classe Identifier qui possede comme attribut Rigth
    un identifier a un droit
    mais ce meme droit peut etre attribuer a plusieurs Identifier

    mais le droit n'a pas connaisance des identifiers auquel il a été affecté.

    comment représenté ceci en XML ?? je me casse la tete, pour moi c'est un one-to-many
    mais apparement ce n'est pas possible comme ca
    sinon j'ai vu le many to many, avec unique="true" mais j'ai une erreur de compile, le unique="true" ne lui convient pas....

  11. #11
    Membre expérimenté
    Inscrit en
    Septembre 2003
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 174
    Par défaut
    Citation Envoyé par lilou77
    j'ai une classe Identifier qui possede comme attribut Rigth
    un identifier a un droit
    mais ce meme droit peut etre attribuer a plusieurs Identifier

    mais le droit n'a pas connaisance des identifiers auquel il a été affecté.
    Si j'ai bien compris, dans ce cas la, il faut mettre un <manu-to-one> dans le mapping de la classe Identifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <many-to-one name="right" class="Right"/>
    Surtout ne pas mettre unique="true", sinon un Right ne pourrait pas avoir plusieurs Identifier.

    sylvain_2020

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

Discussions similaires

  1. [V8] Model créé, mais table non créée
    Par guidono2 dans le forum Odoo (ex-OpenERP)
    Réponses: 4
    Dernier message: 19/12/2014, 19h19
  2. Lien entre tables non crée
    Par Invité dans le forum Linq
    Réponses: 2
    Dernier message: 08/07/2013, 00h06
  3. JPA Hibernate Index non crée dans Mysql
    Par fvisticot dans le forum JPA
    Réponses: 5
    Dernier message: 24/10/2010, 04h35
  4. Réponses: 2
    Dernier message: 25/08/2009, 16h46
  5. Impossible d'accéder aux tables non créées par dbo
    Par Pete dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/10/2005, 14h01

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