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
en faite je voudrai supprimer l'ancien object pour evité de surcharge 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
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
Partager