database - One To Many and Duplicate entry -


i use jpa->hibernate. playframework. want have relationship.

 category - 1:n -> tag 

every category can have many tags, tags not know it.

so, this:

@entity public class category ... {     @onetomany     public list<tag> tags = new linkedlist<tag>(); } 

i have test:

@test public void playwithtags() {

    tag tag1 = new tag("tag1").save(); // managed playframework      category cat1 = new category("cat1");     cat1.tags.add(tag1);     cat1.save();      // check if tag1 , cat1 saved       assertequals(1, tag.count());     assertequals(1, category.count());      category cat2 = new category("cat2");     cat2.tags.add(tag1);     cat2.save();  } 

the result is:

16:18:01,555 error ~ duplicate entry '1' key 'tags_id' 16:18:01,555 error ~ not synchronize database state session org.hibernate.exception.constraintviolationexception: not execute jdbc batch update     @ org.hibernate.exception.sqlstateconverter.convert(sqlstateconverter.java:96)     @ org.hibernate.exception.jdbcexceptionhelper.convert(jdbcexceptionhelp .... java:908)     @ java.lang.thread.run(thread.java:619) caused by: java.sql.batchupdateexception: duplicate entry '1' key 'tags_id'     @ com.mysql.jdbc.preparedstatement.executebatchserially(preparedstatement.java:2020) 

it seems cat2.save() try more should

if if use merge() instead of save() works good:

 cat2.merge(); 

but why?

you're mixing 2 concepts: primary key , foreign key.

there can 1 pk fk means "there must element id in other table". fk doesn't constrain uniqueness.

[edit] problem you're mixing entities. how did tag1 returned save()?

this entity must 1 hibernate, not result new. if looks insane, must in save():

session.save(tag); return session.load(tag.getid()); 

this way, entity managed hibernate. when entity managed hibernate, hibernate knows when has save entity , when has been saved.

so when cat2.tags.add(tag1); in example above, hibernate thinks "oh, don't know tag, must new one".

and tries save tag again.


Comments

Popular posts from this blog

objective c - Change font of selected text in UITextView -

php - Accessing POST data in Facebook cavas app -

c# - Getting control value when switching a view as part of a multiview -