I've some problems with cascade insertion.
Thanks a lot.
Code:
Here is the stackTrace :
net.sf.hibernate.PropertyValueException: not-null property references a null or transient value: persistent.Child.parent
at net.sf.hibernate.impl.SessionImpl.checkNullability(SessionImpl.java:1277)
at net.sf.hibernate.impl.SessionImpl.doSave(SessionImpl.java:928)
at net.sf.hibernate.impl.SessionImpl.doSave(SessionImpl.java:857)
Hibernate version:2.0 MainCode:
Transaction tx= session.beginTransaction();
Parent parent = new Parent();
parent.setName("parent1");
parent.setChild(new TreeSet());
Child child = new Child();
child.setName("child1");
parent.addChild(child);
session.save(parent);
tx.commit();
Mapping documents:Parent.hml.xml :
Code:
<hibernate-mapping>
<class name="com.flashannonces.website.persistent.Parent" table="PARENTS">
<id name="id" type="java.lang.String" unsaved-value="null">
<column name="PARENT_ID" not-null="true" sql-type="char(32)"/>
<generator class="uuid.string"/>
</id>
<set name="child" table="CHILDS" lazy="true" inverse="true" cascade="all">
<key><column name="PARENT_ID" not-null="true"/></key>
<one-to-many class="com.flashannonces.website.persistent.Child"/>
</set>
<property name="name" type="string" update="true" insert="true" access="property" column="NAME" length="64" not-null="true"/>
</class>
</hibernate-mapping>
Child.hbm.xml :
Code:
<hibernate-mapping>
<class name="persistent.Child" table="CHILDS">
<id name="id" type="java.lang.String" unsaved-value="null">
<column name="CHILD_ID" not-null="true" sql-type="char(32)"/>
<generator class="uuid.string"/>
</id>
<property name="name" type="string" update="true" insert="true" access="property" column="NAME" length="64" not-null="true"/>
<many-to-one name="parent" class="persistent.Parent" column="PARENT_ID" not-null="true"/>
</class>
</hibernate-mapping>
Persistent class Code:
public class Parent {
private String id;
private String name;
private Set child;
public Set getChild() {return child;}
public void setChild(Set child) {this.child = child;}
public void addChild(Child child) {this.child.add(child);}
public String getId() {return id;}
public void setId(String id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
}
public class Child {
private String id;
private String name;
private Parent parent;
public String getId() {return id;}
public void setId(String id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public Parent getParent() {return parent;}
public void setParent(Parent parent) {this.parent = parent;}
}
Table creation scriptsCode:
create table PARENTS (
PARENT_ID char(32) not null,
NAME varchar(64) not null,
primary key (PARENT_ID)
);
create table CHILDS (
CHILD_ID char(32) not null,
NAME varchar(64) not null,
PARENT_ID char(32) not null,
primary key (CHILD_ID)
);
The PARENT_ID field of CHILDS table is not filled