[hibernate-issues] [Hibernate-JIRA] Updated: (HHH-4851) OneToOneSecondPass Metadata is mistakenly interpreted

Emmanuel Bernard (JIRA) noreply at atlassian.com
Wed Jan 27 03:16:36 EST 2010


     [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-4851?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Emmanuel Bernard updated HHH-4851:
----------------------------------

       Assignee: Emmanuel Bernard
    Component/s: annotations

> OneToOneSecondPass Metadata is mistakenly interpreted
> -----------------------------------------------------
>
>                 Key: HHH-4851
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-4851
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: annotations
>    Affects Versions: 3.5.0-Beta-3
>            Reporter: Claude Houle
>            Assignee: Emmanuel Bernard
>         Attachments: hibernate-annotation-3.4.0.GA_3.4.0.1.GA.patch, unit-test.zip
>
>   Original Estimate: 30 minutes
>  Remaining Estimate: 30 minutes
>
> 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/
> If you take a look at the attached file unit-test.zip which contains a sample of code which reproduce the issue.
> The other file attached contains the fixed I applied to the source-code to eliminate the problem

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list