Hi Claude, Could you create a unit test reproducing the issue, open a JIRA with your patch+unit test and refer it back here, I will apply it.
Emmanuel PS I don't see the relation between what you are describing and HHH-4344 or even ANN-556 On 22 janv. 2010, at 17:58, Claude Houle wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Hello All, > > I've been tracking an issue that has been causing us some trouble > regarding annotation-based hibernate mappings. The exception occurs at > run-time only: > /org.hibernate.PropertyValueException: not-null property references a > null or transient value ... > / > At first I believed we had an issue with our entity mapping was faulty > and went to try and figure it out... However, I came accross several > examples on the wide internet and showed that my mapping seems > correct. Furthermore, I had some other entities mapped in a similar > fashion that did not cause any issue... How could that be? > > I traced the Hibernate code to a class named > org.hibernate.cfg.OneToOneSecondPass (Hibernate Annotations 3.4.0.GA > for those interested to look at the code) up to line 147: > > > ... > Iterator it = otherSide.getJoinIterator(); > Join otherSideJoin = null; > while ( it.hasNext() ) { > otherSideJoin = (Join) it.next(); > if ( otherSideJoin.containsProperty( otherSideProperty ) ) { > break; > } > } > if ( otherSideJoin != null ) { > ... > } > ... > > If you look closely, it seems that if there are JOINs but none > contains the otherSideProperty, the variable otherSideJoin will not be > null and will contains the last joins of the iterator even if it is > not valid. > > The patched-up code would look like: > > ... > Iterator it = otherSide.getJoinIterator(); > Join otherSideJoin = null; > while ( it.hasNext() ) { > Join otherSideJoinValue = (Join) it.next(); > if ( otherSideJoinValue.containsProperty( otherSideProperty ) ) { > otherSideJoin = otherSideJoinValue; > break; > } > } > if ( otherSideJoin != null ) { > ... > } > ... > > To fix my issue, I applied this patch: > Index: src/main/java/org/hibernate/cfg/OneToOneSecondPass.java > =================================================================== > - --- src/main/java/org/hibernate/cfg/OneToOneSecondPass.java > (revision 18572) > +++ src/main/java/org/hibernate/cfg/OneToOneSecondPass.java > (working copy) > @@ -146,8 +146,9 @@ > Iterator it = otherSide.getJoinIterator(); > Join otherSideJoin = null; > while ( it.hasNext() ) { > - - otherSideJoin = (Join) it.next(); > - - if ( otherSideJoin.containsProperty( > otherSideProperty ) ) { > + Join otherSideJoinValue = (Join) it.next(); > + if ( otherSideJoinValue.containsProperty( > otherSideProperty ) ) { > + otherSideJoin = otherSideJoinValue; > break; > } > } > > I compiled the code locally and re-tried my failing code and it worked > beautifully. it seemed that my last joins in the iterator has a > nullable = false which caused the runtime > /org.hibernate.PropertyValueException: not-null property references a > null or transient value/ > > In all honesty, there are plenty of existing bug-reports where this > particular issue could fit: > http://opensource.atlassian.com/projects/hibernate/browse/HHH-4344 > http://opensource.atlassian.com/projects/hibernate/browse/ANN-556 > > > Thanks, > > - -- > > Claude Houle > 8D Technologies inc. > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.10 (Darwin) > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ > > iEYEARECAAYFAktZ2S8ACgkQlk+F7nx+VYtQHQCgp4EH1Ey0h/kbMbeE7hCUJBLG > broAnAgq3ZuMC79MlN9njfR8x9yK05R1 > =7xV5 > -----END PGP SIGNATURE----- > > _______________________________________________ > hibernate-dev mailing list > hibernate-dev@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/hibernate-dev _______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev