Hallo,
i'm new using hibernate 3.0.5 and i'm having a problem with it. i want to be sure i did understand everything well:
I have an association like this
[Object A]1--------->*[Object B]1--------->*[Object C]
B has a foreign-key to A's primary-key, C has a foreign-key B's primary-key. all primary-keys are generated
now i've created an instance of A, added at least one instance of B to A and some C instances to C, none of them synchronized to DB (so all of them are transient by now).
than i called session.persist(A) and i'm having the exception as follows.
Mapping documents: <set name="blockList" order-by="ID_FODE" lazy="true" fetch="select" inverse="true" cascade="all"> <key foreign-key="FOXF03_ID_FODEC"> <column name="ID_FODE" sql-type="$sourceEnd.sqlType"/> </key> <one-to-many class="business.model.BlockImpl"/> </set>
Code for saving: FormVersion fullFormVersion = (FormVersion)getFullFormVersion(); HibernateUtil.beginnTransaction(); Session session = HibernateUtil.getSession(); session.persist(fullFormVersion); HibernateUtil.commitTransaction(); HibernateUtil.closeSession();
Full stack trace of any exception that occurs: org.hibernate.exception.ConstraintViolationException: could not insert: [business.model.BlockImpl] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:63) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1869) at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:2200) at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:46) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:239) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:223) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:136) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:274) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:730) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:324) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:86) at business.model.dao.HibernateUtil.commitTransaction(HibernateUtil.java:106) at test.FormVersionTest.testCascadedCreateFormVersion(FormVersionTest.java:88) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60) at java.lang.reflect.Method.invoke(Method.java:391) 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.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:436) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:311) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) Caused by: COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2/NT] SQL0530N Der Wert von FOREIGN KEY "DB2POWERUSER.FOXF03.SQL050918105546281" zum Einfügen oder Aktualisieren entspricht keinem Wert des Primärschlüssels der übergeordneten Tabelle. SQLSTATE=23503
at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(Unknown Source) at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(Unknown Source) at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.check_return_code(Unknown Source) at COM.ibm.db2.jdbc.app.DB2PreparedStatement.execute2(Unknown Source) at COM.ibm.db2.jdbc.app.DB2PreparedStatement.executeUpdate(Unknown Source) at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:22) at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1853)
Name and version of the database you are using: DB2 version 8
when i have a look at the instances, all primary keys have been created and passed to the refered classes, but at 'commit', the exception accurred, probably because the parent-class has not allready been flushed to DB (so i becomme a problem with the foreign-key of the child class)
my question: is it possible to ifluence the order objects are flushed?
or may i do something to get this running without having to save the parent class, before i save it's children (i wolud like to make use of the 'cascade' capabilities)?
|