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 :

probleme d'enregistrement d'un objet


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 67
    Points : 48
    Points
    48
    Par défaut probleme d'enregistrement d'un objet
    Bonjour a tous

    voila mon probleme:
    J'ai créé une table declaration sur postgres :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     
    CREATE TABLE declaration
    (
      id_declaration int8 NOT NULL DEFAULT nextval('seq_declaration'::text),
      ninea char(10) NOT NULL,
      id_user int8 NOT NULL,
      num_fact varchar(10),
      date_declaration date,
      date_imposition varchar(50),
      date_cotisation_deb varchar(50),
      date_cotisation_fin varchar(50),
      montant_total float8,
      ae_taxable float8,
      ae_non_taxable float8,
      ar_non_taxable float8,
      ar_taxable_exo float8,
      ar_suspensiontva float8,
      total_mnt_nstva float8,
      plps float8,
      a_precomptetva float8,
      mnt_total_taxable float8,
      mnt_tva_brute float8,
      precomptetva float8,
      acompte float8,
      imput_cheq_ddi float8,
      total_avance float8,
      deduc_moi float8,
      credit_tva_moi_prec float8,
      total_deduc float8,
      solde_total_exig float8,
      credit_tva_report float8,
      mnt_rembours float8,
      CONSTRAINT pk_declaration PRIMARY KEY (id_declaration),
      CONSTRAINT fk_declaration_declaration_entrepri FOREIGN KEY (ninea) REFERENCES entreprise (ninea) ON UPDATE RESTRICT ON DELETE RESTRICT,
      CONSTRAINT fk_declaration_declaration_user FOREIGN KEY (id_user) REFERENCES utilisateur (id_user) ON UPDATE RESTRICT ON DELETE RESTRICT
    )
    je vous envoie ma classe bean et le .hbm.xml
    Ensuite dans mon action lorsque j'appel la metode pour enregistrer il me renvoie cette erreur a la console:

    INFO : DeclarationDao.java -> Entree dans methode insererDeclaration la classe DeclarationDao
    Hibernate: select nextval ('seq_declaration')
    Hibernate: select entreprise_.ninea, entreprise_.nom_entreprise as nom2_1_, entreprise_.sigle as sigle1_, entreprise_.forme as forme1_, entreprise_.compte as compte1_, entreprise_.adresse as adresse1_, entreprise_.rue as rue1_, entreprise_.quartier as quartier1_, entreprise_.localite as localite1_, entreprise_.bp as bp1_, entreprise_.renseigne as renseigne1_, entreprise_.extenso as extenso1_, entreprise_.activite as activite1_, entreprise_.tel as tel1_, entreprise_.num_secu as num15_1_, entreprise_.num_registre as num16_1_, entreprise_.email as email1_, entreprise_.description as descrip18_1_, entreprise_.adresse_stable as adresse19_1_, entreprise_.comptable as comptable1_, entreprise_.bp_comptable as bp21_1_, entreprise_.tel_comptable as tel22_1_, entreprise_.forme_societe as forme23_1_, entreprise_.profession as profession1_, entreprise_.unite_secteur as unite25_1_, entreprise_.centre_fiscal as centre26_1_, entreprise_.centre_perception as centre27_1_ from entreprise entreprise_ where entreprise_.ninea=?
    org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.tva.bo.Utilisateur
    at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:216)
    at org.hibernate.type.EntityType.getIdentifier(EntityType.java:99)
    at org.hibernate.type.EntityType.isDirty(EntityType.java:216)
    at org.hibernate.type.TypeFactory.findDirty(TypeFactory.java:412)
    at org.hibernate.persister.entity.BasicEntityPersister.findDirty(BasicEntityPersister.java:2538)
    at org.hibernate.event.def.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:344)
    at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:108)
    at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:190)
    at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:70)
    at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
    at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:730)
    at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:324)
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:86)
    at com.tva.dao.imp.DeclarationDao.insertDeclaration(DeclarationDao.java:46)
    at com.tva.manager.imp.DeclarationMg.saveDeclaration(DeclarationMg.java:61)
    at com.tva.struts.action.declaration.EnregistrerDeclarationAction.executeAction(EnregistrerDeclarationAction.java:152)
    at com.tva.struts.action.ActionBase.execute(ActionBase.java:143)
    at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    at com.tva.struts.servlets.ServletBase.doPost(ServletBase.java:38)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Thread.java:595)


    voici ma classe DeclarationDao.java
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    public class DeclarationDao extends HibernateDaoSupport implements IDeclarationDao {
     
       protected Log logger = LogFactory.getLog(DeclarationDao.class); 
       protected static final String hqlRequest  = " from Declaration as declaration";
       ConstantePresentation constante = new ConstantePresentation();
     
    	public void insertDeclaration(Declaration declaration) {
    	    logger.info("Entree dans methode insererDeclaration la classe DeclarationDao");
    	    Session session = this.getSessionFactory().openSession();
    	    try{
    	        Transaction tx = session.beginTransaction();
    	        session.save(declaration);
    	        tx.commit();
    	    }catch (Exception e){
    	        e.printStackTrace();
    	        logger.error("Erreur lors de l'insertion d'une declaration");
    	    }finally{
    	        session.close();
    	    }
     
    	}
    	/* (non-Javadoc)
    	 * @see com.tva.dao.interfaces.IDeclarationDao
    	 */
    	public void saveOrUpdateDeclaration(Declaration declaration) {
    	    logger.info("Entree dans la methode saveDeclaration la classe DeclarationDao");
    	    Session session = this.getSessionFactory().openSession();
    	    try{
    	        Transaction tx = session.beginTransaction();
    	        session.saveOrUpdate(declaration);
    	        //getHibernateTemplate().save(declaration);
    	        tx.commit();
    	    }catch (Exception e){
    	        e.printStackTrace();
    	        logger.error("Erreur lors de la sauvegarde d'une declaration");
    	    }finally{
    	        session.close();
    	    }
     
    	}
     
    }
    Fichiers attachés Fichiers attachés

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Points : 83
    Points
    83
    Par défaut Cascade
    A priori, c'est que tu essayes de sauver un objet qui contient des références vers d'autres objets qui n'ont pas encore été sauvé... un Cascade persist bien placé sur tes associations ManyToOne resoudra ponctuellemetn le problème à priori....

    L'anaylise de ton dao me laisse perplexe... tu utilises une stratégie session-per-operation qui est mauvaise pour les performances... La session est sensée avoir une durée de vie un peu plus longue que la tienne... tu peux regarder les stratégie sesssion-per-request ou ego open-session-in-view....

    Le paramétrage d'une session contextuelle est essentiel pour obtenir des performances acceptables avec hibernate... je t'invite a consulter la litérature surle sujet, ou à te faire aider par quelqu'un qui connait voire suivre une formation ;-)

    Bon courage !



    Citation Envoyé par verdi-verda Voir le message
    personne pour m'aider ?

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 67
    Points : 48
    Points
    48
    Par défaut
    merci denisjava pour votre reponse ,
    comme vous avez du remarqué je ne suis pas experte en hibernate ,est ce que je peux avoir une petit exemple sur les cascades dont vous me parlez ,je n'ai aucune idée comment le faire

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 67
    Points : 48
    Points
    48
    Par défaut
    ouf merci j'ai eu une solution a mon probleme :
    voila j'ai changé mes fichiers de mapping:
    dans le mapping de utilisateur j'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     <set name="declarations" inverse="true" cascade="all-delete-orphan">
                    <key column="id_user"/>
                    <one-to-many class="com.tva.bo.Declaration"/>
                  </set>
    dans le fichier de mapping de declaration j'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            <many-to-one
    	      	name="utilisateur"
                    insert="false" 
    	        update="false"
    	        class="com.tva.bo.Utilisateur">
    		<column name="id_user" not-null="true"/>
    	 </many-to-one>
    dans ma classe DeclarationDao j'ai ajouté le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    	        Utilisateur utilisateur =(Utilisateur)session.load(Utilisateur.class, new Integer(id_user));
    	        utilisateur.addDeclarations(declaration);
    	        session.save(declaration);
    	        session.flush();
    dans la classe Utilisateur.java j'ai ajouté ceci:
    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
     
     private Set declarations = new HashSet();
     
        public void addDeclarations(Declaration d)
        {
            d.setUtilisateur(this);
            declarations.add(d);
        }
     public Set getDeclarations() {
            return declarations;
        }
     
        public void setDeclarations(Set declarations) {
            this.declarations = declarations;
        }
    bien entendu dans la classe Declaration.java j'ai ajouté la propriété utilisateur


    bien quand j'enregistre des declarations pour l'instant ça marche quand a ma maniere de recuperer les session je verais apres avoir approndis mes recherches sur hibernate mais pour l'instant des fichiers que je consulte me proposent cette methode
    En tout merci pour votre aide

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/03/2008, 15h13
  2. [Language][Package]Probleme de portée d'un Objet
    Par julien.v dans le forum Langage
    Réponses: 6
    Dernier message: 06/06/2005, 14h23
  3. Réponses: 11
    Dernier message: 02/05/2005, 19h30
  4. [Oracle 10g]Problème pour enregistrer blob
    Par Invité dans le forum Hibernate
    Réponses: 6
    Dernier message: 27/04/2005, 11h45
  5. [FLASH MX] Probleme avec le drag d'objet
    Par Toutouffe dans le forum Flash
    Réponses: 3
    Dernier message: 23/01/2005, 22h41

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