Hibernate version: hibernate3 beta4
2 mapping documents:
Code:
<hibernate-mapping package="visioconference">
<class name="MediaSessionLevel" table="mediasessionlevel">
<id name="SQLId" column="msl_id" type="long" unsaved-value="null">
<generator class="native"/>
</id>
<bag name="bandwidths" table="bandwidth" cascade="all-delete-orphan">
<key column="msl_id" not-null="true"/>
<one-to-many class="MediaSessionLevel$Bandwidth"/>
</bag>
</class>
<class name="MediaSessionLevel$Bandwidth" table="bandwidth">
<id name="SQLId" column="ban_id" type="long" unsaved-value="null">
<generator class="native"/>
</id>
<property name="modifier" column="ban_modifier" type="string" length="31" not-null="true"/>
<property name="value" column="ban_value" type="long" not-null="true"/>
</class>
</hibernate-mapping>
Code:
<hibernate-mapping package="visioconference">
<joined-subclass name="Session" extends="MediaSessionLevel" table="session">
<key column="msl_id"/>
<property name="creator" column="ses_creator" type="string" length="63" not-null="true"/>
</joined-subclass>
</hibernate-mapping>
If i add a MediaSessionLevel that's ok:
m = new MediaSessionLevel();
b = new Bandwidth("m",123);
m.addBandwidth(b);
session.save(m);
But if a create a Session (Session inherits MediaSessionLevel, but doesn't override addBandwidth), i've an exception:
s = new Session();
b = new Bandwidth("m",123);
s.addBandwidth(b);
session.save(s);
Full stack trace of any exception that occurs:
org.hibernate.PropertyValueException: not-null property references a null or transient value: visioconference.MediaSessionLevel$Bandwidth._bandwidthsBackref
at org.hibernate.engine.Nullability.checkNullability(Nullability.java:73)
at org.hibernate.event.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:227)
at org.hibernate.event.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:157)
at org.hibernate.event.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:103)
at org.hibernate.event.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:180)
at org.hibernate.event.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:169)
at org.hibernate.event.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:92)
at org.hibernate.event.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:65)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:466)
at org.hibernate.engine.Cascades$5.cascade(Cascades.java:153)
at org.hibernate.engine.Cascades.cascade(Cascades.java:721)
at org.hibernate.engine.Cascades.cascadeCollection(Cascades.java:858)
at org.hibernate.engine.Cascades.cascade(Cascades.java:739)
at org.hibernate.engine.Cascades.cascade(Cascades.java:817)
at org.hibernate.event.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:354)
at org.hibernate.event.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:256)
at org.hibernate.event.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:157)
at org.hibernate.event.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:103)
at org.hibernate.event.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:180)
at org.hibernate.event.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:31)
at org.hibernate.event.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:169)
at org.hibernate.event.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:25)
at org.hibernate.event.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:65)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:479)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:474)
at visioconference.unittest.HibernateTest.testSession(HibernateTest.java:184)
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:585)
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 junit.textui.TestRunner.doRun(TestRunner.java:116)
at junit.textui.TestRunner.start(TestRunner.java:172)
at junit.textui.TestRunner.main(TestRunner.java:138)