Hi,

I've got a class Category that is similar to the TreeGroup object
used in the junit tests, in that it has a parent attribute of the
same class as itself, Category, and it has a childs attribute
that is a Vector containing Category objects.

I get problems when trying to write an instance of Category
(rootCategory) to the database using ODMG in the following way:
 
 Transaction tx1 = odmg.newTransaction();
 tx1.begin();
 /*
  *  rootCategory is a Category instance with child Categorys.
  *  Each child Category has its own child Categorys too.
  */
 tx1.lock(rootCategory,tx1.WRITE);
 tx1.commit();

This method works almost 100% in that rootCategory and its childs
are written correctly to the database.  However I always get an
SQLException thrown that complains about "Duplicate entry 'x'
for key 1"  (where x is always the int id of the first child
Category of the rootCategory).

(the exception output is at the end of the message)

I don't think that repostiory_user.xml for Category is the
problem as everything works fine when using the PersistenceBroker
API alone to store the rootCategory instance, like:

        broker.store(rootCategory);

Does anybody know whats causing this behaviour and how I might
resolve this problem?

Thanks in advance,
Eliot
------------
Test output:
-------------
[org.apache.ojb.broker.ta.PersistenceBrokerFactoryDefaultImpl] INFO: Already created 
persistence broker instances: 0
[org.apache.ojb.broker.util.sequence.SequenceManagerFactory] INFO: Use sequence 
manager class: class org.apache.ojb.broker.util.sequence.SequenceManagerHiLoImpl
[org.apache.ojb.broker.accesslayer.AbstractPoolableConnectionFactory] INFO: # Create 
connection pool for JdbcDescriptorKey 1272749578 #
[org.apache.ojb.broker.accesslayer.AbstractConnectionFactory] INFO: # Already created 
connections: 1 returning : org.gjt.mm.mysql.jdbc2.Connection@3570b0
[org.apache.ojb.broker.ta.PersistenceBrokerFactoryDefaultImpl] INFO: Already created 
persistence broker instances: 1
[org.apache.ojb.broker.accesslayer.AbstractConnectionFactory] INFO: # Already created 
connections: 2 returning : org.gjt.mm.mysql.jdbc2.Connection@89cf1e
[org.apache.ojb.broker.ta.PersistenceBrokerFactoryDefaultImpl] INFO: Already created 
persistence broker instances: 2
[org.apache.ojb.broker.accesslayer.JdbcAccess] ERROR: SQLException during the 
execution of the insert (for a com.quoteology.directory.Category): Invalid argument 
value: Duplicate entry '35' for key 1
Invalid argument value: Duplicate entry '35' for key 1
[org.apache.ojb.odmg.ObjectEnvelopeTable] ERROR: Commit on object level failed for tx 
org.apache.ojb.odmg.TransactionImpl@342ba4
Invalid argument value: Duplicate entry '35' for key 1
[org.apache.ojb.odmg.TransactionImpl] ERROR: Could not prepare for commit
Invalid argument value: Duplicate entry '35' for key 1
------------- ---------------- ---------------
------------- Standard Error -----------------
java.sql.SQLException: Invalid argument value: Duplicate entry '35' for key 1
        at org.gjt.mm.mysql.MysqlIO.sendCommand(Unknown Source)
        at org.gjt.mm.mysql.MysqlIO.sqlQueryDirect(Unknown Source)
        at org.gjt.mm.mysql.Connection.execSQL(Unknown Source)
        at org.gjt.mm.mysql.PreparedStatement.executeUpdate(Unknown Source)
        at org.gjt.mm.mysql.PreparedStatement.executeUpdate(Unknown Source)
        at org.apache.ojb.broker.accesslayer.JdbcAccess.executeInsert(Unknown Source)
        at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(Unknown Source)
        at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(Unknown Source)
        at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(Unknown Source)
        at org.apache.ojb.odmg.states.StateNewDirty.commit(Unknown Source)
        at org.apache.ojb.odmg.ObjectEnvelopeTable.commit(Unknown Source)
        at org.apache.ojb.odmg.TransactionImpl.doCommitOnObjects(Unknown Source)
        at org.apache.ojb.odmg.TransactionImpl.prepareForCommit(Unknown Source)
        at org.apache.ojb.odmg.TransactionImpl.commit(Unknown Source)
        at com.quoteology.directory.ODMGTreeTest.testTree(ODMGTreeTest.java:94)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at junit.framework.TestCase.runTest(TestCase.java:154)
        at junit.framework.TestCase.runBare(TestCase.java:127)
        at junit.framework.TestResult$1.protect(TestResult.java:106)
        at junit.framework.TestResult.runProtected(TestResult.java:124)
        at junit.framework.TestResult.run(TestResult.java:109)
        at junit.framework.TestCase.run(TestCase.java:118)
        at junit.framework.TestSuite.runTest(TestSuite.java:208)
        at junit.framework.TestSuite.run(TestSuite.java:203)
        at 
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:325)
        at 
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:524)
java.sql.SQLException: Invalid argument value: Duplicate entry '35' for key 1
        at org.gjt.mm.mysql.MysqlIO.sendCommand(Unknown Source)
        at org.gjt.mm.mysql.MysqlIO.sqlQueryDirect(Unknown Source)
        at org.gjt.mm.mysql.Connection.execSQL(Unknown Source)
        at org.gjt.mm.mysql.PreparedStatement.executeUpdate(Unknown Source)
        at org.gjt.mm.mysql.PreparedStatement.executeUpdate(Unknown Source)
        at org.apache.ojb.broker.accesslayer.JdbcAccess.executeInsert(Unknown Source)
        at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(Unknown Source)
        at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(Unknown Source)
        at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(Unknown Source)
        at org.apache.ojb.odmg.states.StateNewDirty.commit(Unknown Source)
        at org.apache.ojb.odmg.ObjectEnvelopeTable.commit(Unknown Source)
        at org.apache.ojb.odmg.TransactionImpl.doCommitOnObjects(Unknown Source)
        at org.apache.ojb.odmg.TransactionImpl.prepareForCommit(Unknown Source)
        at org.apache.ojb.odmg.TransactionImpl.commit(Unknown Source)
        at com.quoteology.directory.ODMGTreeTest.testTree(ODMGTreeTest.java:94)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at junit.framework.TestCase.runTest(TestCase.java:154)
        at junit.framework.TestCase.runBare(TestCase.java:127)
        at junit.framework.TestResult$1.protect(TestResult.java:106)
        at junit.framework.TestResult.runProtected(TestResult.java:124)
        at junit.framework.TestResult.run(TestResult.java:109)
        at junit.framework.TestCase.run(TestCase.java:118)
        at junit.framework.TestSuite.runTest(TestSuite.java:208)
        at junit.framework.TestSuite.run(TestSuite.java:203)
        at 
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:325)
        at 
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:524)
rethrown as org.apache.ojb.broker.PersistenceBrokerSQLException: Invalid argument 
value: Duplicate entry '35' for key 1
        at org.apache.ojb.broker.accesslayer.JdbcAccess.executeInsert(Unknown Source)
        at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(Unknown Source)
        at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(Unknown Source)
        at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(Unknown Source)
        at org.apache.ojb.odmg.states.StateNewDirty.commit(Unknown Source)
        at org.apache.ojb.odmg.ObjectEnvelopeTable.commit(Unknown Source)
        at org.apache.ojb.odmg.TransactionImpl.doCommitOnObjects(Unknown Source)
        at org.apache.ojb.odmg.TransactionImpl.prepareForCommit(Unknown Source)
        at org.apache.ojb.odmg.TransactionImpl.commit(Unknown Source)
        at com.quoteology.directory.ODMGTreeTest.testTree(ODMGTreeTest.java:94)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at junit.framework.TestCase.runTest(TestCase.java:154)
        at junit.framework.TestCase.runBare(TestCase.java:127)
        at junit.framework.TestResult$1.protect(TestResult.java:106)
        at junit.framework.TestResult.runProtected(TestResult.java:124)
        at junit.framework.TestResult.run(TestResult.java:109)
        at junit.framework.TestCase.run(TestCase.java:118)
        at junit.framework.TestSuite.runTest(TestSuite.java:208)
        at junit.framework.TestSuite.run(TestSuite.java:203)
        at 
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:325)
        at 
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:524)
Caused by: java.sql.SQLException: Invalid argument value: Duplicate entry '35' for key 
1
        at org.gjt.mm.mysql.MysqlIO.sendCommand(Unknown Source)
        at org.gjt.mm.mysql.MysqlIO.sqlQueryDirect(Unknown Source)
        at org.gjt.mm.mysql.Connection.execSQL(Unknown Source)
        at org.gjt.mm.mysql.PreparedStatement.executeUpdate(Unknown Source)
        at org.gjt.mm.mysql.PreparedStatement.executeUpdate(Unknown Source)
        ... 24 more
org.odmg.TransactionAbortedException: Invalid argument value: Duplicate entry '35' for 
key 1
        at org.apache.ojb.odmg.ObjectEnvelopeTable.commit(Unknown Source)
        at org.apache.ojb.odmg.TransactionImpl.doCommitOnObjects(Unknown Source)
        at org.apache.ojb.odmg.TransactionImpl.prepareForCommit(Unknown Source)
        at org.apache.ojb.odmg.TransactionImpl.commit(Unknown Source)
        at com.quoteology.directory.ODMGTreeTest.testTree(ODMGTreeTest.java:94)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at junit.framework.TestCase.runTest(TestCase.java:154)
        at junit.framework.TestCase.runBare(TestCase.java:127)
        at junit.framework.TestResult$1.protect(TestResult.java:106)
        at junit.framework.TestResult.runProtected(TestResult.java:124)
        at junit.framework.TestResult.run(TestResult.java:109)
        at junit.framework.TestCase.run(TestCase.java:118)
        at junit.framework.TestSuite.runTest(TestSuite.java:208)
        at junit.framework.TestSuite.run(TestSuite.java:203)
        at 
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:325)
        at 
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:524)
------------- ---------------- ---------------

NB>>>>>>>>>>>>> (testTree is not the testTree TestCase found in the OJB dist)

Testcase: testTree took 6.381 sec
        Caused an ERROR
Invalid argument value: Duplicate entry '35' for key 1
org.odmg.TransactionAbortedException: Invalid argument value: Duplicate entry '35' for 
key 1
        at org.apache.ojb.odmg.ObjectEnvelopeTable.commit(Unknown Source)
        at org.apache.ojb.odmg.TransactionImpl.doCommitOnObjects(Unknown Source)
        at org.apache.ojb.odmg.TransactionImpl.prepareForCommit(Unknown Source)
        at org.apache.ojb.odmg.TransactionImpl.commit(Unknown Source)
        at com.quoteology.directory.ODMGTreeTest.testTree(ODMGTreeTest.java:94)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

Testcase: testTree

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to