Need help with Hibernate? Read this first:
http://www.hibernate.org/ForumMailingli ... AskForHelp
Hibernate version:2.1.7c
Mapping documents:
Code between sessionFactory.openSession() and session.close():
Full stack trace of any exception that occurs:
Name and version of the database you are using:postgres 8.0
The generated SQL (show_sql=true):
Debug level Hibernate log excerpt:
Bonjour a tous
J'espère que mon pb va interrésser quelques personnes car
je desespère un peu depuis deux jours ...
j'ai un shéma de table comme suit:
groupe_utilisateur(pk gru_id)=gru_obj(pk gru_id,obj_id)=objet(pk obj_id)
..................................................||
..................................................||
................................................droit(pk droit_id)
je voudrais charger la liste des objets d'un groupe et modifier
son droit.
groupe_utilisateur. est composé de ses propriétes + un set
(cf + bas )
GruObj.hbm.xml a une classe composite de 2 element
objet, groupe_utilisateur
+ 3 many-to-one objet, groupe_utilisateur, droit
(cf + bas)
la mise a jour de groupe_utilisateur s'effectue très bien
mais rien ne se passe sur gru_obj ?
le + curieux c'est que dès que unsaved-value="any"
j'obtiens des 'insert into ( gru_id,obj_id) values ( 1, 2)
(en erreur duplicate pk)
hibernate oublie droit_id ? mais pourquoi ?
je n'ai rien avec unsaved-value="none" ?
CREATE TABLE
droit
(
droit_id serial NOT NULL,
droit_lib varchar(60) NOT NULL,
CONSTRAINT pk_droit PRIMARY KEY (droit_id)
)
droit n'a que 2 valeurs 'R' et 'RW'
CREATE TABLE
objet
(
obj_id serial NOT NULL,
obj_lib varchar(60) NOT NULL,
CONSTRAINT pk_objet PRIMARY KEY (obj_id)
)
CREATE TABLE
groupe_utilisateur
(
gru_id serial NOT NULL,
gru_lib varchar(60) NOT NULL,
CONSTRAINT pk_groupe_utilisateur PRIMARY KEY (gru_id)
)
Nous sommes dans un cas simple a priori (le cas a été simplifié un peu)
GroupeUtilisateur.hbm.xml
est tel que :
********************************************
<class name="app.hb.GroupeUtilisateur" table="groupe_utilisateur">
<id
name="gru_id"
type="java.lang.Integer"
column="gru_id"
unsaved-value="null"
>
<generator class="native" >
<param name="sequence">groupe_utilisateur_gru_id_seq</param>
</generator>
</id>
<property
name="gru_lib"
type="java.lang.String"
column="gru_lib"
not-null="true"
length="60"
/>
<!-- bi-directional one-to-many groupe_utilisateur to gru_obj -->
<set name="gru_obj_gru_ids" inverse="true" cascade="save-update" lazy="false" >
<key>
<column name="gru_id" not-null="true" />
</key>
<one-to-many class="app.hb.GruObj" />
</set>
</class>
********************************************
GruObj.hbm.xml
<hibernate-mapping>
<class name="app.hb.GruObj" table="gru_obj">
<composite-id name="comp_id" class="app.hb.GruObjPK" >
<key-property
name="obj_id"
column="obj_id"
type="java.lang.Integer"
length="4"
/>
<key-property
name="gru_id"
column="gru_id"
type="java.lang.Integer"
length="4"
/>
</composite-id>
<!--bi-directional many-to-one gru_obj to objet -->
<many-to-one
name="objet_obj_id"
class="app.hb.Objet"
not-null="true"
update="false"
insert="false"
>
<column name="obj_id" />
</many-to-one>
<!--bi-directional many-to-one gru_obj to groupe_utilisateur -->
<many-to-one
name="groupe_utilisateur_gru_id"
class="app.hb.GroupeUtilisateur"
not-null="true"
update="false"
insert="false"
>
<column name="gru_id" />
</many-to-one>
<!--bi-directional many-to-one gru_obj to droit -->
<many-to-one
name="droit_droit_id"
class="app.hb.Droit"
not-null="true"
update="false"
insert="false"
>
<column name="droit_id" />
</many-to-one>
</class>
</hibernate-mapping>
********************************************
public class
GruObjPK implements Serializable
{
// Declaration des variables classiques
private Integer obj_id;
private Integer gru_id;
/********************************************
* Constructeur de classe avec initialisation.
********************************************/
public GruObjPK(
Integer obj_id
,Integer gru_id
)
{
this.obj_id = obj_id;
this.gru_id = gru_id;
}
plus les get et set
********************************************
public class
GruObj implements Serializable
{
// Pas de Declaration des variables classiques
// Declaration des variables classiques
private app.hb.Objet objet_obj_id;
private app.hb.GroupeUtilisateur groupe_utilisateur_gru_id;
private app.hb.Droit droit_droit_id;
private app.hb.GruObjPK comp_id;
/********************************************
* Constructeur de classe avec initialisation.
********************************************/
public GruObj(
app.hb.GruObjPK comp_id
,app.hb.Objet objet_obj_id
,app.hb.GroupeUtilisateur groupe_utilisateur_gru_id
,app.hb.Droit droit_droit_id
)
{
this.comp_id = comp_id;
this.objet_obj_id = objet_obj_id;
this.groupe_utilisateur_gru_id = groupe_utilisateur_gru_id;
this.droit_droit_id = droit_droit_id;
}
plus les get et set
********************************************
public class
GroupeUtilisateur implements Serializable
{
// Declaration des variables classiques
private Integer gru_id;
private String gru_lib;
private Set gru_obj_gru_ids ;
private Set gru_util_gru_ids ;
/********************************************
* Constructeur de classe avec initialisation.
********************************************/
public GroupeUtilisateur(
Integer gru_id
,String gru_lib
,Set gru_obj_gru_ids
,Set gru_util_gru_ids
)
{
this.gru_id = gru_id;
this.gru_lib = gru_lib;
this.gru_obj_gru_ids = gru_obj_gru_ids ;
this.gru_util_gru_ids = gru_util_gru_ids ;
}
+ les get et les set
Si vous avez une idée Merci
[/b]