Bonjour,
Désolé si mon titre est obscur, mon soucis n'est pas simple à résumer en quelques mots !
Je dispose d'un objet Individu (que j'épure ici), qui a un attribut dont le type peut varier (caractIndividu). Je passe donc par un type abstrait et deux implémentation de ce type.
Or, j'ai une erreur sur le cas suivant : un objet Individu récupéré en BDD que je souhaite modifier (avec un appel au setter) en attribuant une valeur à l'attribut caractIndividu d'un type différent de celui de sa valeur actuelle (à la sélection, "caractIndividu" est de type "CaractIndividu1", je souhaite le mettre à jour avec un type "CaractIndividu2").
L'erreur est la suivante : "a different object with the same identifier value was already associated with the session"
Mon code :
Classe Individu :
Mon objet AbstractCaracteristiqueIndividu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 @Entity @Table(name = "individu ") public class Individu implements Serializable { private static final long serialVersionUID = 1L; @EmbeddedId private PkIndividu id; @ManyToOne(cascade={CascadeType.ALL}, fetch=FetchType.EAGER) @JoinColumn(name="idind", referencedColumnName="idind") private AbstractCaractIndividu caractIndividu; }
Les deux implémentation de cette classe abstraite :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 @Entity @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) public abstract class AbstractCaractIndividu implements Serializable { private static final long serialVersionUID = -1675072412134818653L; @Id private String id; private Integer idind; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 @Entity @Table(name = "CaractIndiv1") public class CaractIndiv1 extends TravailAbstractIndividuBfi { private static final long serialVersionUID = -5942318785394457679L; public TravailIndividuInsert() {} }Ce modèle peut sembler biscornu mais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 @Entity @Table(name = "CaractIndiv2") public class CaractIndiv2 extends TravailAbstractIndividuBfi { private static final long serialVersionUID = 6880488264246993157L; public TravailIndividuInsert() {} }
* J'ai modifié sciemment les noms des objets pour ne pas avoir à détailler l'aspect fonctionnel de mon projet
* La séparation en deux tables différentes des "CaractIndividu" à du sens au niveau modèle de données
* Je n'ai de toute façon pas la liberté de modifier la structure existante.
Avez-vous des idées pour me sortir de cette panade (j'espère avoir été assez compréhensible :S) ?
Merci d'avance pour vos lumière.
Partager