Hibernate Save Strange Behavior

I have a custom object that has a one-to-many relationship with string types. I believe that they are simple comparisons. The type table contains the corresponding names user_id and type variables with the primary key "id", which is basically a counter.

<class name="Users" table="users">
    <id column="id" name="id" />
    ...
    <set name="types" table="types" cascade="save-update">
        <key column="id" />
        <one-to-many class="Types" />
    </set>
</class>

<class name="Types" table="types">
    <id column="id" name="id" />
    <property column="user_id" name="user_id" type="integer" />
    <property column="type" name="type" type="string" />
</class>

This is the java that I used to add to the database:

User u = new User();
u.setId(user_id);
...
Collection<Types> t = new HashSet<Types>();
t.add(new Type(auto_incremented_id, user_id, type_name));
u.setTypes(t);

getHibernateTemplate().saveOrUpdate(u);

When I run it, it gives this error:

61468 [http-8080-3] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1062, SQLState: 23000
61468 [http-8080-3] ERROR org.hibernate.util.JDBCExceptionReporter - Duplicate entry '6' for key 'PRIMARY'
61468 [http-8080-3] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update

When I check sql, it shows:

Hibernate: insert into users (name, id) values (?, ?)
Hibernate: insert into types (user_id, type, id) values (?, ?, ?)
Hibernate: update types set id=? where id=?
  • Why is Hibernate trying to update the type identifier?

The error says: Duplicate the entry “6” for the key “PRIMARY”, but really not? I made sure that the identifiers increase every time. Both users and types are added to the database correctly.

, 7 6. , Hibernate user_id 6 id = 6, id = 7? , ?

? ?

  • ? , ? , , .

, . ...

+5
2

- <key> - "user_id", "id". , .

, , , Hibernate , :

 <id column="id" name="id">
   <generator class="native"/>
 </id>

Hibernate Documentation .

-, , , , , " ":

 <set name="types" table="types">
    <key column="user_id"/>
    <element column="type" type="string"/>
 </set> 

"" . "", , .

, "" - , , "Users" "Types" :

 <set name="types" table="types" inverse="true">
    <key column="user_id"/>
    <one-to-many class="Types"/>
 </set>

 ...
 in Types mapping:
 <many-to-one name="user" column="user_id" not-null="true"/>

"" "" "". .

+2

, , , ( ):

getHibernateTemplate().save(user);
getHibernateTemplate().save(new Type(user.id, type_name));

< class= "native" /" > .

?

, user_id , ; . Weird! , , , --. ...

-... :)

0

All Articles