I have a "hierarchical" table where records can optionally be associated with a parent record.  I would like to make sure that, IF the foreign key is set, it refers to a valid record.  And I might want to use CRUD.  I have the following in activateMetaData:
 
  addConstraint(new ConstrainedBean()
    .associations(DynamicAttribute.class));
  addConstraint(new ConstrainedProperty("parentAttributeId").manyToOne(
    DynamicAttribute.class, "id", CreateTable.NOACTION,
    CreateTable.CASCADE).notNull(false).notEmpty(false));
If I try to save without setting the parentAttributeId, I get:
 
1) testSaveAttr(com.tx.app.TestDynamicAttrManager)com.uwyn.rife.database.exceptions.ExecutionErrorException: Error while executing the SQL 'INSERT INTO dynamicattribute (createdDatetime, label, parentAttributeId, value) VALUES (?, ?, ?, ?)'.
at com.uwyn.rife.database.DbPreparedStatement.executeUpdate(DbPreparedStatement.java:236)
at com.uwyn.rife.database.querymanagers.generic.databasedrivers.org_apache_derby_jdbc_EmbeddedDriver$1.performUpdate(org_apache_derby_jdbc_EmbeddedDriver.java:103)
at com.uwyn.rife.database.DbQueryManager.executeUpdate(DbQueryManager.java:259)
at com.uwyn.rife.database.querymanagers.generic.databasedrivers.org_apache_derby_jdbc_EmbeddedDriver._insertWithoutCallbacks(org_apache_derby_jdbc_EmbeddedDriver.java:88)
at com.uwyn.rife.database.querymanagers.generic.AbstractGenericQueryManager$3.useTransaction(AbstractGenericQueryManager.java:507)
at com.uwyn.rife.database.querymanagers.generic.AbstractGenericQueryManager$3.useTransaction(AbstractGenericQueryManager.java:418)
at com.uwyn.rife.database.DbQueryManager.inTransaction(DbQueryManager.java:2783)
at com.uwyn.rife.database.querymanagers.generic.AbstractGenericQueryManager._save(AbstractGenericQueryManager.java:417)
at com.uwyn.rife.database.querymanagers.generic.databasedrivers.generic.save(generic.java:117)
at com.uwyn.rife.database.querymanagers.generic.GenericQueryManagerDelegate.save(GenericQueryManagerDelegate.java:93)
at com.uwyn.rife.cmf.dam.ContentQueryManager.access$001(ContentQueryManager.java:78)
at com.uwyn.rife.cmf.dam.ContentQueryManager$1.useTransaction(ContentQueryManager.java:471)
at com.uwyn.rife.cmf.dam.ContentQueryManager$1.useTransaction(ContentQueryManager.java:396)
at com.uwyn.rife.database.DbQueryManager.inTransaction(DbQueryManager.java:2783)
at com.uwyn.rife.cmf.dam.ContentQueryManager.save(ContentQueryManager.java:395)
at com.tx.rife.db.PersistenceMangerRifeImpl.save(PersistenceMangerRifeImpl.java:124)
at com.tx.app.task.DynamicAttributeManager.saveAttribute(DynamicAttributeManager.java:47)
at com.tx.app.TestDynamicAttrManager.testSaveAttr(TestDynamicAttrManager.java:73)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at com.uwyn.rife.test.RunWithEngineClassLoader.main(RunWithEngineClassLoader.java:44)
Caused by: SQL Exception: INSERT on table 'DYNAMICATTRIBUTE' caused a violation of foreign key constraint 'SQL060717115304291' for key (0). The statement has been rolled back.
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(Unknown Source)
at com.uwyn.rife.database.DbPreparedStatement.executeUpdate(DbPreparedStatement.java:228)
... 37 more
 
Any ideas would be great.
 
 - JT
_______________________________________________
Rife-users mailing list
[email protected]
http://lists.uwyn.com/mailman/listinfo/rife-users

Reply via email to