[hibernate-dev] org.hibernate.PropertyValueException: not-null property references a null or transient value
Emmanuel Bernard
emmanuel at hibernate.org
Sat Jan 23 10:57:06 EST 2010
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 at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/hibernate-dev
More information about the hibernate-dev
mailing list