-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Prb mise a jour colonne : valeur fantaisiste au moment du sa
PostPosted: Fri Nov 28, 2008 6:37 am 
Newbie

Joined: Fri Nov 28, 2008 5:50 am
Posts: 1
Bonjour,
on utilise une base Oracle 9.0 dans un projet JEE 5+Websphere 6.1+Hibernate 3+Spring, on a le prb suivant depuis 3 jours (alors que tout fonctionnait à merveille avant...) :

on a une offre commerciale qu'on créé sur une page Web. Une offre commerciale est attachée à un support (voir plus bas) par une clé étrangère (un number). A la création, pas de problème, la clé étrangère est bien renseignée.

Ensuite, on modifie l'offre commerciale a partir d'une autre page. On modifie tout sauf la clé étrangère, au moment du saveOrUpdate dans Hibernate, la valeur de la clé est bonne (identique à celle au moment de la création) mais ensuite, quand on fait un session.flush pour répercuter les modifs dans la base Oracle, la contrainte de la clé étrangère est violée par Oracle faisant planter le update.

Le plus étonnant c'est que tout fonctionnait avant. On a rien touché. On a même remis des vieilles sources du projet pour voir sans succés.

J'ai déactivé la contrainte dans la base d'Oracle pour voir la valeur insérée dans la base, c'est étrange, après le flush de la session, alors que la valeur de la clé est bonne dans l'offre commerciale coté hibernate, dans la base Oracle, la valeur insérré est ... aléatoire ! (0,06 , 1E+102 etc...).

Si quelqu'un a deja rencontré ce prb il me sera bien utile car je m'arrache les cheveux là :)

Merci

Voici le SQL des deux tables concernées : (les tables ont été réduites par rapport la réalité) :
Code:
create table BASE.SUPPORT  (
   REFS             NUMBER                          not null,
   A                VARCHAR2(12),
   constraint PK_SUPPORT primary key (REFS)
);

Code:
create table BASE.OFFRE_COMMERCIALE_DETAIL  (
   REFO            NUMBER                          not null,
   REFS               NUMBER                          not null,
   B            VARCHAR2(12),
   constraint PK_OFFRE_COMMERCIALE_DETAIL primary key (REFO)
);


Code:
alter table BASE.OFFRE_COMMERCIALE_DETAIL
   add constraint FK_OFFRE_CO_OFFRE_COM_SUPPORT foreign key (REFS)
      references BASE.SUPPORT (REFS)
      not deferrable;



Voici le mapping :

Pour les Supports :

Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
   "-//Hibernate/Hibernate Mapping DTD//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping package="src.mapping">
   <class
      name="Support"
      table="SUPPORT"
   >
      <meta attribute="sync-DAO">false</meta>
      <id
         name="Id"
         type="integer"
         column="REFS"
      >
         <generator class="increment"/>
      </id>

      <property
         name="A"
         column="A"
         type="string"
         not-null="false"
         length="12"
      />
   

      <set name="OffreCommercialeDetails" inverse="true" lazy="true">
         <key column="REFS"/>
         <one-to-many class="OffreCommercialeDetail"/>
      </set>

   </class>   
</hibernate-mapping>


Pour les Offres commerciales :

Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
   "-//Hibernate/Hibernate Mapping DTD//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping package="src.mapping">
   <class
      name="OffreCommercialeDetail"
      table="OFFRE_COMMERCIALE_DETAIL"
   >
      <meta attribute="sync-DAO">false</meta>
      <id
         name="Id"
         type="integer"
         column="REFO"
      >
         <generator class="increment"/>
      </id>

      <property
         name="Refs"
         column="REFS"
         type="integer"
         not-null="true"
         length="22"
      />
      <property
         name="B"
         column="B"
         type="string"
         not-null="false"
         length="12"
      />
      

   </class>   
</hibernate-mapping>


Voici le code Java de création/Mise a jour d'une offre commerciale :

public void saveOffreCommercialeDetail(OffreCommercialeDetail o)
{
getHibernateTemplate().saveOrupdate(o);
getHibernateTemplate().flush();

}


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.