Ho un oggetto utente che ha una relazione uno-a-molti con i tipi di stringa. Credo che siano semplici mappature. La tabella dei tipi contiene i nomi user_id e di tipo variabile associati, con una chiave primaria 'id' che è fondamentalmente un contatore.Sospensione Salva comportamento strano
<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>
Questa è la java che ho usato per l'aggiunta al 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);
quando l'eseguo, dà questo errore:
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
Quando controllo l'SQL, mostra:
Hibernate: insert into users (name, id) values (?, ?)
Hibernate: insert into types (user_id, type, id) values (?, ?, ?)
Hibernate: update types set id=? where id=?
- Perché Hibernate tenta di aggiornare l'id dei tipi?
L'errore dice: Duplica la voce '6' per la chiave 'PRIMARY', ma in realtà non lo è? Mi sono assicurato che gli ID vengano incrementati ogni volta. E gli utenti e i tipi vengono aggiunti correttamente nel database.
Ho registrato le informazioni in entrata, e i tipi aggiunti hanno un id di 7 e un id utente di 6. Potrebbe essere che Hibernate prende l'id utente di 6 e ha provato ad aggiornare i tipi e impostare id = 6 dove id = 7? Quindi l'errore della chiave primaria duplicata?
Ma perché dovrebbe fare qualcosa di così strano? C'è un modo per impedirne l'aggiornamento?
- Devo impostare l'ID manualmente? Se no, allora come dovrei aggiungere i tipi? Fornisce altri errori quando aggiungo un oggetto tipo che contiene solo una stringa di testo e nessun ID.
Grazie ragazzi. Stai rimuginando per giorni ...
bloccato con raccolta di elementi! Grazie! – April