Lukas Lang
2009-08-06 15:32:22 UTC
Hey everybody,
I'm facing a problem when trying to map a one to many relation.
Imagine the following: A Parent entity references a List of Child
entities. The mapping is defined as follows:
<mapping>
<class name="org.castor.cpa.test.lazycollection.Child" identity="id">
<map-to table="lazy_collection_child" />
<field name="id" type="integer">
<sql name="id" type="integer" />
</field>
</class>
<class name="org.castor.cpa.test.lazycollection.Parent" identity="id">
<map-to table="lazy_collection_parent" />
<field name="id" type="integer">
<sql name="id" type="integer" />
</field>
<field name="children" type="org.castor.cpa.test.lazycollection.Child"
lazy="false" collection="arraylist">
<sql many-key="parent_id" />
</field>
</class>
</mapping>
when executing the following statements:
Parent parent = new Parent();
parent.setId(1);
Child child1 = new Child();
child1.setId(1);
Child child2 = new Child();
child2.setId(2);
parent.setChildren(Arrays.asList(child1, child2));
// Persist entities.
_db.setAutoStore(true);
_db.begin();
_db.create(parent);
_db.commit();
_db.setAutoStore(false);
The create operation fails because the insert statement is as follows:
INSERT INTO lazy_collection_child (id) VALUES (1);
Hence, Castor results in:
java.sql.SQLIntegrityConstraintViolationException: Column 'PARENT_ID'
cannot accept a NULL value.: Column 'PARENT_ID' cannot accept a NULL
value. at
org.castor.cpa.persistence.sql.keygen.NoKeyGenerator.executeStatement(NoKeyGenerator.java:212)
My general questions are:
Why would it not be possible to map a one to many relation only by
specifying a key column?
The Castor JDO docu does not take care of this issue. It only shows
bidirectional one to many. Has noone ever requested that feature?
Ralf, Ahmad: Any ideas, since you are rewriting SQL stmt generation?
Regards,
Lukas
PS: I'm facing this behavior with 1.2, 1.3 and 1.3.0.1-SNAPSHOT.
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email
I'm facing a problem when trying to map a one to many relation.
Imagine the following: A Parent entity references a List of Child
entities. The mapping is defined as follows:
<mapping>
<class name="org.castor.cpa.test.lazycollection.Child" identity="id">
<map-to table="lazy_collection_child" />
<field name="id" type="integer">
<sql name="id" type="integer" />
</field>
</class>
<class name="org.castor.cpa.test.lazycollection.Parent" identity="id">
<map-to table="lazy_collection_parent" />
<field name="id" type="integer">
<sql name="id" type="integer" />
</field>
<field name="children" type="org.castor.cpa.test.lazycollection.Child"
lazy="false" collection="arraylist">
<sql many-key="parent_id" />
</field>
</class>
</mapping>
when executing the following statements:
Parent parent = new Parent();
parent.setId(1);
Child child1 = new Child();
child1.setId(1);
Child child2 = new Child();
child2.setId(2);
parent.setChildren(Arrays.asList(child1, child2));
// Persist entities.
_db.setAutoStore(true);
_db.begin();
_db.create(parent);
_db.commit();
_db.setAutoStore(false);
The create operation fails because the insert statement is as follows:
INSERT INTO lazy_collection_child (id) VALUES (1);
Hence, Castor results in:
java.sql.SQLIntegrityConstraintViolationException: Column 'PARENT_ID'
cannot accept a NULL value.: Column 'PARENT_ID' cannot accept a NULL
value. at
org.castor.cpa.persistence.sql.keygen.NoKeyGenerator.executeStatement(NoKeyGenerator.java:212)
My general questions are:
Why would it not be possible to map a one to many relation only by
specifying a key column?
The Castor JDO docu does not take care of this issue. It only shows
bidirectional one to many. Has noone ever requested that feature?
Ralf, Ahmad: Any ideas, since you are rewriting SQL stmt generation?
Regards,
Lukas
PS: I'm facing this behavior with 1.2, 1.3 and 1.3.0.1-SNAPSHOT.
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email