-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: duplicate key problem
PostPosted: Mon Apr 19, 2004 1:38 pm 
Newbie

Joined: Fri Nov 14, 2003 3:51 pm
Posts: 4
The brief info:

I'm getting a
net.sf.hibernate.JDBCException: Could not execute JDBC batch update
...
Caused by: java.sql.SQLException: ERROR: Cannot insert a duplicate key into unique index multiple_choice_grading_pkey

The table where the duplicate key error is happening is for a mapped primitive array (of ints). A similar thing is happening elsewhere for a list of strings.

Detailed info:

Hibernate 2.1.1

I am using the "open session in view" pattern - one Session per ServletRequest/thread.

Relevant snippet of mapping document:

Code:
       
        <primitive-array
            name="grading"
            table="multiple_choice_grading"
        >

              <key
                  column="question_id"
              />

              <index
                  column="index"
              />

              <element
                  column="value"
                  type="integer"
                  not-null="false"
                  unique="false"
              />

        </primitive-array>

Relevant Java code:

Code:
    Question q = (Question) sess.load(Question.class, qid);
    q.setGrading(new int[]{100, 0, 0});
    sess.saveOrUpdate(q);



It may be relevant to note that this problem seems correlated with a problem in which, for some unknown reason, two different ServletRequests appear to be trying to save the same question at the same time (so each of them would be executing the above code) - but each should have a separate Hibernate Session (due to the open session in view pattern), so I don't see why this would cause the duplicate key problem.


Full stack trace:
Code:
net.sf.hibernate.JDBCException: Could not execute JDBC batch update
        at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:125)
        at net.sf.hibernate.impl.BatcherImpl.prepareStatement(BatcherImpl.java:55)
        at net.sf.hibernate.impl.BatcherImpl.prepareBatchStatement(BatcherImpl.java:105)
        at net.sf.hibernate.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:535)
        at net.sf.hibernate.impl.ScheduledCollectionRecreate.execute(ScheduledCollectionRecreate.java:23)
        at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2308)
        at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2265)
        at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2187)
        at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:61)
        at org.dlworkshop.app.SessionManager.doFilter(SessionManager.java:128)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
        at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
        at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
        at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
        at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
        at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:432)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:386)
        at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:534)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:530)
        at java.lang.Thread.run(Thread.java:479)
Caused by: Batch entry 0 [Ljava.lang.Object;@700941 was aborted.
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:106)
        at net.sf.hibernate.impl.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:54)
        at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:118)
        ... 38 more
Caused by: java.sql.SQLException: ERROR:  Cannot insert a duplicate key into unique index multiple_choice_grading_pkey
        at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:131)
        at org.postgresql.jdbc1.AbstractJdbc1Connection.ExecSQL(AbstractJdbc1Connection.java:505)
        at org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Statement.java:320)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:48)
        at org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:197)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:91)
        ... 40 more


Database: PostgreSQL 7.3.2

Let me know if you need more info.
Code:


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.