java - Hibernate collection update foiled by unique index -
java - Hibernate collection update foiled by unique index -
i'm trying move kid object 1 parent another, in database controlled hibernate. i'm getting error on table created , controlled hibernate through @onetomany
annotation. knows way around this.
i have 2 objects, 1 containing list of other. let's phone call them kennel , dog. i'm doing moving dog
1 kennel
kennel
:
dog dog = dogservice.getdog(dogid); kennel oldkennel = dog.getkennel(); if (oldkennel.getdogs().contains(dog)) { oldkennel.getdogs().remove(dog); } kennel newkennel = kennelservice.getkennel(newkennelid); newkennel.getdogs().add(dog); dog.setkennel(newkennel);
there 3 tables involved:
-- table mapped kennel object table kennels (kennel_id int) -- table bring together table controlled hibernate table kennels_dogs (kennels_kennel_id int, dogs_dog_id int) -- table mapped dog object table dogs (dog_id int)
the specific error i'm getting on bring together table kennels_dogs
java.sql.batchupdateexception: duplicate entry '14' key 'dogs_dog_id'
but there's 1 record in file id - 1 i'm trying update. hibernate seems doing trying insert record in kennels_dogs
table new values before deletes old record.
for example, let's dog
id=14 in kennel
id=12. want move dog kennel id=47. manually, these commands:
delete kennels_dogs kennels_kennel_id=12 , dogs_dog_id=12 insert kennels_dogs (kennels_kennel_id, dogs_dog_id) values (47, 12)
what hibernate perform these actions in opposite order:
insert kennels_dogs (kennels_kennel_id, dogs_dog_id) values (47, 12) delete kennels_dogs kennels_kennel_id=12 , dogs_dog_id=12
the insert
fails because of unique index on field dogs_dog_id
- there record dogs_dog_id
= 12 in table.
it seems obvious solution might delete unique index, without knowing why it's there, i'm hesitant remove (and logically, it's right - dog
can in 1 place @ time.)
anyone have brilliant way around this?
it seems unusual me have kennels_dogs bring together table. should not necessary @onetomany. according hibernate docs:
6.2.5. one-to-many associations
a one-to-many association links tables of 2 classes via foreign key no intervening collection table.
i create sure have @onetomany(mappedby = "dog")
annotated on dog collection in kennel class, , @manytoone @joincolumn(name = "kennel_id", nullable = false)
annotated on dog class.
java mysql sql hibernate
Comments
Post a Comment