Bonjour,
J'aurais besoin de votre aide pour savoir si mon cas est faisable avec Hibernate 5.1
Contexte
Un article possède des SegmentsClassification et des Composants.
Un Composant est exactement un SegmentClassification mais de type 9.
La liste des segmentclassification dans Article sont les SegmentsClassification de type 1.
Lorsque je charge un Article avec Hibernate,
- la liste des segmentClassification est bien rempli avec ses SegmentsClassification dont le type est 1
- la liste des composants est bien rempli avec ses SegmentsClassification dont le type est 9
Classes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 @Entity public class Article implements Serializable { private Long id; private Set<SegmentClassification> segmentsClassification = new LinkedHashSet<SegmentClassification>(); private Set<SegmentClassification> composants = new LinkedHashSet<>(); ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 @Entity public class SegmentClassification implements Serializable { private Long id;
Mapping
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 <class name="Article" table="DDB_PRD_ARTI"> <id name="id" type="long" column="ID" unsaved-value="null"> <generator class="org.hibernate.id.enhanced.SequenceStyleGenerator"> <param name="sequence_name">SEQ_ARTI</param> <param name="optimizer">none</param> </generator> </id> <set name="segmentsClassification" cascade="none" table="DDB_PRD_ARSG" access="field" fetch="select" where="ARSG_IS_COMPOSANT=1"> <key column="ARSG_ID_ARTI" not-null="true" foreign-key="FK_ARSG_CLSG" /> <many-to-many class="fr.pgih.ref.ddb.prd.quartier.classification.generique.domaine.SegmentClassification" column="ARSG_ID_CLSG" foreign-key="FK_ARSG_ARTI" /> </set> <set name="composants" cascade="none" table="DDB_PRD_ARSG" access="field" fetch="select" where="ARSG_IS_COMPOSANT=9"> <key column="ARSG_ID_ARTI" not-null="true" foreign-key="FK_ARSG_CLSG" /> <many-to-many class="fr.pgih.ref.ddb.prd.quartier.classification.generique.domaine.SegmentClassification" column="ARSG_ID_CLSG" foreign-key="FK_ARSG_ARTI" /> </set> ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <class name="SegmentClassification" table="DDB_PRD_CLSG"> <id name="id" type="long" column="ID" unsaved-value="null"> <generator class="org.hibernate.id.enhanced.SequenceStyleGenerator"> <param name="sequence_name">SEQ_CLSG</param> <param name="optimizer">none</param> </generator> </id> ...Problème
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <class name="ArticleSegClassif" table="DDB_PRD_ARSG"> <!-- Identifiant avec cles composites --> <composite-id name="id" class="ArticleSegClassifId"> <key-property name="idArticle" column="ARSG_ID_ARTI" /> <key-property name="idSegClassif" column="ARSG_ID_CLSG" /> </composite-id> <property name="isComposant"> <column name="ARSG_IS_COMPOSANT"> </column> </property>
Je rajoute un composant à la liste des composants de l'article.
Comment je peux faire pour que, à la l'enregistrement de l'article, Hibernate fasse un insert en base dans la table d'association (DDB_PRD_ARSG) avec le renseigné (exemple type = 9) ?
Actuellement Hibernate fait bien l'insert mais le type n'est pas renseigné. La table d'association contient uniquement l'id de DDB_PRD_ARTI et l'id de DDB_PRD_CLSG.
Je voudrais éviter de coder le store via Hibernate dans la table d'association pour mettre le type à 9 ou à un autre nombre. Si Hibernate est capable de charger les éléments en fonction de la clause where, je me dis que peu être il est capable de faire la différence lors de l'enregistrement et donc Hibernate renseigne tout seul le type à 9 ou à 1.
Partager