Je suis débutant en hibernate et je veu mapper un heritage entre plusieurs classes, voici mon cas:
j'ai une classe mère
Typedico avec trois classe fille
Groupe,
Composant,
Service. la classe composant peut contenir plusieurs Groupe et Service, le type d'heritage choisie est une table par sous-classe
le code de la classe Typedico
Code:
<hibernate-mapping package="com.myapp.exploreoffre.javabeans" default-lazy="true">
<class name="Typedico" table="typedico" dynamic-update="true" dynamic-insert="true">
<id name="typedicoid" column="typedicoid" unsaved-value="0">
<generator class="sequence">
<param name="sequence">serie</param>
</generator>
</id>
...
<property name="commentaire" column="commentaire"/>
<joined-subclass name="Langue" table="langue">
<key column="typedicoid"/>
<property name="langueid" column="langueid" insert="false" update="false"/>
<property name="typedico" column="typedico" type="boolean"/>
</joined-subclass>
<joined-subclass name="Motif_refus" table="motif_refus">
<key column="typedicoid"/>
<property name="motifrefusid" column="motifrefusid" insert="false" update="false"/>
<property name="typedico" column="typedico" type="boolean"/>
</joined-subclass>
<joined-subclass name="Option" table="option">
<key column="typedicoid"/>
<property name="optionid" column="optionid" insert="false" update="false"/>
<property name="typedico" column="typedico" type="boolean"/>
<property name="type" column="type"/>
<property name="description" column="description"/>
<property name="montant" column="montant"/>
<property name="unite" column="unite"/>
<property name="tva" column="tva"/>
</joined-subclass>
<joined-subclass name="Ville" table="ville">
<key column="typedicoid"/>
<property name="villeid" column="villeid" insert="false" update="false"/>
<property name="codepostal" column="codepostal"/>
</joined-subclass>
<joined-subclass name="Theme" table="theme">
<key column="typedicoid"/>
<property name="themeid" column="themeid" insert="false" update="false"/>
<property name="typedico" column="typedico" type="boolean"/>
<property name="image" column="image"/>
</joined-subclass>
<joined-subclass name="Paragraphe" table="paragraphe">
<key column="typedicoid"/>
<property name="paragrapheid" column="paragrapheid" insert="false" update="false"/>
<property name="typedico" column="typedico" type="boolean"/>
<property name="type" column="type"/>
<property name="titre" column="titre"/>
</joined-subclass>
<joined-subclass name="Lieu" table="lieu">
<key column="typedicoid"/>
<property name="lieuid" column="lieuid" insert="false" update="false"/>
<property name="typedico" column="typedico" type="boolean"/>
</joined-subclass>
<joined-subclass name="Service" table="service">
<key column="typedicoid"/>
<property name="serviceid" column="serviceid" insert="false" update="false"/>
<property name="typedico" column="typedico" type="boolean"/>
<property name="description" column="description"/>
<property name="compris" column="compris" type="boolean"/>
</joined-subclass>
<joined-subclass name="Groupe" table="groupe">
<key column="typedicoid"/>
<property name="groupeid" column="groupeid" insert="false" update="false"/>
<property name="typedico" column="typedico" type="boolean"/>
</joined-subclass>
<joined-subclass name="Composant" table="composant">
<key column="typedicoid"/>
<property name="composantid" column="composantid" insert="false" update="false"/>
<property name="typedico" column="typedico" type="boolean"/>
<property name="statut" column="statut"/>
<property name="type" column="type"/>
<property name="duree" column="duree" type="java.util.GregorianCalendar"/>
<property name="debut" column="debut" type="java.util.GregorianCalendar"/>
<property name="description" column="description"/>
<property name="descriptionsimple" column="descriptionsimple"/>
<property name="prix" column="prix"/>
<set name="paragraphes" table="paragraphes">
<key column="composantid"/>
<many-to-many class="Paragraphe"/>
</set>
<set name="services" table="services">
<key column="composantid"/>
<many-to-many class="Service"/>
</set>
<set name="themes" table="themes">
<key column="composantid"/>
<many-to-many class="Theme"/>
</set>
<set name="options" table="options">
<key column="composantid"/>
<many-to-many class="Option"/>
</set>
<set name="conditions" table="conditions">
<key column="composantid"/>
<many-to-many class="Condition"/>
</set>
<set name="lieux" table="lieux">
<key column="composantid"/>
<many-to-many class="Lieu"/>
</set>
</joined-subclass>
voici le code SQL qui me permet de créer mes tables
Code:
CREATE TABLE typedico
(
typedicoid integer NOT NULL DEFAULT nextval('serie'::regclass),
nom text,
commentaire text,
CONSTRAINT pk_typedico PRIMARY KEY (typedicoid)
)
CREATE TABLE composant
(
composantid integer NOT NULL DEFAULT nextval('serie'::regclass),
typedicoid integer,
typedico boolean,
statut text,
"type" text,
duree timestamp without time zone,
debut timestamp without time zone,
description text,
descriptionsimple text,
prix text,
CONSTRAINT pk_composant PRIMARY KEY (composantid),
CONSTRAINT fk_composan_composant_typedico FOREIGN KEY (typedicoid)
REFERENCES typedico (typedicoid) MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE RESTRICT
)
...
toutes les classes filles ont comme clés étrangère
typedicoid quand j'exécute le code suivant pour insérer un nouveau groupe à un
Utilisateur Code:
BeanUtils.copyProperties(utilisateur, fillform.getUtilisateur());
BeanUtils.copyProperties(utilisateur.getAuthentification(), fillform.getUtilisateur().getAuthentification());
new HibernateDAO().insert(utilisateur);
for (int dI = 0; dI < fillform.getIdentifiants().length; dI++) {
groupe = (Groupe) new HibernateDAO().find(new Groupe(), new Integer(fillform.getIdentifiants(dI)));
utilisateur.addGroupes(groupe);
}
form.reset(mapping, request);
return mapping.findForward("utilisateur");
voici la sortie affichée par hibernate
Code:
Hibernate: /* insert com.myapp.exploreoffre.javabeans.Authentification */ insert into authentification (identifiant, password, authentificationid) values (?, ?, ?)
Hibernate: /* insert com.myapp.exploreoffre.javabeans.Utilisateur */ insert into personne (nom, prenom, email, telephone, fax, gsm, personneid) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: /* insert com.myapp.exploreoffre.javabeans.Utilisateur */ insert into utilisateur (initiale, authentificationid, personneid) values (?, ?, ?)
Hibernate: /* load com.myapp.exploreoffre.javabeans.Groupe */ select groupe0_.typedicoid as typedicoid6_0_, groupe0_1_.nom as nom6_0_, groupe0_1_.commentaire as commenta3_6_0_, groupe0_.groupeid as groupeid15_0_, groupe0_.typedico as typedico15_0_ from groupe groupe0_ inner join typedico groupe0_1_ on groupe0_.typedicoid=groupe0_1_.typedicoid where groupe0_.typedicoid=?
Hibernate: /* load com.myapp.exploreoffre.javabeans.Groupe */ select groupe0_.typedicoid as typedicoid6_0_, groupe0_1_.nom as nom6_0_, groupe0_1_.commentaire as commenta3_6_0_, groupe0_.groupeid as groupeid15_0_, groupe0_.typedico as typedico15_0_ from groupe groupe0_ inner join typedico groupe0_1_ on groupe0_.typedicoid=groupe0_1_.typedicoid where groupe0_.typedicoid=?
Hibernate: /* load com.myapp.exploreoffre.javabeans.Groupe */ select groupe0_.typedicoid as typedicoid6_0_, groupe0_1_.nom as nom6_0_, groupe0_1_.commentaire as commenta3_6_0_, groupe0_.groupeid as groupeid15_0_, groupe0_.typedico as typedico15_0_ from groupe groupe0_ inner join typedico groupe0_1_ on groupe0_.typedicoid=groupe0_1_.typedicoid where groupe0_.typedicoid=?
Hibernate: /* load com.myapp.exploreoffre.javabeans.Groupe */ select groupe0_.typedicoid as typedicoid6_0_, groupe0_1_.nom as nom6_0_, groupe0_1_.commentaire as commenta3_6_0_, groupe0_.groupeid as groupeid15_0_, groupe0_.typedico as typedico15_0_ from groupe groupe0_ inner join typedico groupe0_1_ on groupe0_.typedicoid=groupe0_1_.typedicoid where groupe0_.typedicoid=?
les groupes séléctionnés dans la jsp sont bien chargés par hibernate mais la mis à jours dans la DB ne se fait pas la table Groupes qui contient les ID des utilisateurs et de leur groupe ne se met pas à jours, si quelqu'un peu m'aider. Merci.