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
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
Partager