[jboss-user] [Persistence, JBoss/CMP, Hibernate, Database] - [Newbie]Can't persist 2 new objects, if they have the same p
fmars
do-not-reply at jboss.com
Wed Jul 4 18:13:06 EDT 2007
I'm creating 2 not-persisted objects and they have the same persisted object as instance variable. if i try to persist the new objects, i got a Duplicate entry violation. i know what it means, but i don't know what is wrong.
can you please look at these small classes and point what is missing? Thank you.
@Entity
| public class Gene implements java.io.Serializable {
| @Id @GeneratedValue private Integer id;
|
| private String name;
|
| @OneToMany()
| private List<CancerType> cancerTypes;
| public Gene() { }
|
| // Setters and Getters
| }
Table CancerType is filled with some data after table creation!
@Entity
| public class CancerType implements java.io.Serializable {
| @Id @GeneratedValue private Integer id;
|
| private String name;
|
| public CancerType(){ }
|
| // Setters and Getters
| }
And the main:
Session session = new AnnotationConfiguration().configure().buildSessionFactory().getCurrentSession();
| session.beginTransaction();
|
| Gene g1 = new Gene();
| g1.setName("name");
| Gene g2 = new Gene();
| g2.setName("name");
|
| List<CancerType> cts = BasicDAO.session.createQuery("from CancerType").list();
|
| g1.setCancerType(cts);
| g2.setCancerType(cts);
|
| session.save(g1);
| session.save(g2);
|
| session.getTransaction().commit();
|
Output:
Hibernate: select cancertype0_.id as id0_, cancertype0_.name as name0_ from CancerType cancertype0_
| Hibernate: insert into Gene (name) values (?)
| Hibernate: insert into Gene (name) values (?)
| Hibernate: insert into Gene_CancerType (Gene_id, cancerTypes_id) values (?, ?)
| Hibernate: insert into Gene_CancerType (Gene_id, cancerTypes_id) values (?, ?)
| 00:01:39,109 WARN JDBCExceptionReporter:77 - SQL Error: 1062, SQLState: 23000
| 00:01:39,109 ERROR JDBCExceptionReporter:78 - Duplicate entry '1' for key 1
| 00:01:39,109 ERROR AbstractFlushingEventListener:301 - Could not synchronize database state with session
| org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
| at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
| Exception in thread "main" org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
| at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
| at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
| at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
| at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
| at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:143)
| at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
| at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
| at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
| at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
| at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:143)
| at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
| at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
| at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
| at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
| at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
| at tvsas1.Main.a2(Main.java:58)
| at tvsas1.Main.main(Main.java:64)
| Caused by: java.sql.BatchUpdateException: Duplicate entry '1' for key 1
| at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1237)
| at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:936)
| at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
| at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
| ... 9 more
| at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
| at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
| at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
| at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
| at tvsas1.Main.a2(Main.java:58)
| at tvsas1.Main.main(Main.java:64)
| Caused by: java.sql.BatchUpdateException: Duplicate entry '1' for key 1
| at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1237)
| at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:936)
| at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
| at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
| ... 9 more
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4060587#4060587
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4060587
More information about the jboss-user
mailing list