[hibernate-issues] [Hibernate-JIRA] Updated: (HHH-4851) OneToOneSecondPass Metadata is mistakenly interpreted
Claude Houle (JIRA)
noreply at atlassian.com
Wed Jan 27 08:23:29 EST 2010
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-4851?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claude Houle updated HHH-4851:
------------------------------
Attachment: unit-test_asl.zip
Sorry about the license... It was inserted automatically by Eclipse. Here is the same test-case under the Apache Software License 2.0
> 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, unit-test_asl.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