Bonjour

j'ai un objet A qui a une relation one-to-one avec un objet B.
jusque la rien de bien de complique sauf que B est une classe abstraite et B1,B2,B3 des classes qui en hérite.
j'arrive a affecter a A un object B1 , ou B2, ou B3. il me le sauvegarde bien en me créant de id. mais maintenant je voudrai modifier A en changement l'objet B
le save se passe bien mais hélas l'ancien objet B qui lui été attaché reste dans la base
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
@Entity
 class A {
 	@Id 
 	int id;
 	@one-to-one
 	B value;
 }
 
@Entity
@Table(name="b")
@Inheritance (strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn( name="typeB", discriminatorType=DiscriminatorType.STRING)
 abstract class B{
 	@Id
 	int id;
 	@one-to-one(mappedBy="b")
 	A valueA;
 
 }
@Entity
@DiscriminatorValue("B1")
 classe B1 extends B{
 ...
 }
 
@Entity
@DiscriminatorValue("B2")
 classe B2 extends B{
 ...
 }
 
 
 
exemple de code :
A a = new A();
B b1 = new B1();
a.setB(b1);
b1.setA(a);//je sais pas si c'est nécessaire car la relation est unidirectionnel
save(a);
// cree un enregistrement de b1 avec id = 1
//cree un enregistrement de a avec id = 1 et b_id = 1
// tout est ok 
 
B b2 = new B2();
a.setB(b2);
save(a)
// cree un enregistrement de b2 avec id = 2
//ne fait rien avec b1 
//misa a jour de b_id=2
en faite je voudrai supprimer l'ancien object pour evité de surcharge la base.
l'ideal serai que A et B ai le meme Id comme cela il ferai un update de l'enregistrement ( ou peut etre un delete + insert comme hibernate le fait si bien )mais je n'arrive pas avec mon GenericGenerator(strategy="foreign") car il veu enregistre B d'abord et donc prendre l'id de A qui est 0 et donc ca plante.
merci d'avance