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

Popular posts from this blog

xslt - DocBook 5 to PDF transform failing with error: "fo:flow" is missing child elements. Required content model: marker* -

mediawiki - How do I insert tables inside infoboxes on Wikia pages? -

Local Service User Logged into Windows -