[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-3798) failure to lazy load a manyToOne and oneToMany mapped entity

Ronald Kurz (JIRA) noreply at atlassian.com
Tue Mar 10 04:20:39 EDT 2009


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-3798?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=32612#action_32612 ] 

Ronald Kurz commented on HHH-3798:
----------------------------------

First I thought it's a problem with an entity in an OneToMany and a ManyToOne mapping at the same time. But I wrote a test case (see attachment test-case2.tar.gz) with the most simplest possible parent-child mapping. Unless I didn't got the concept of lazy loading totally wrong, this really should work!

@Entity
public class ParentLazy {
  @Id
  public Integer   id;

  @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "childId")
  public Child child;
}

@Entity
public class Child {
  @Id
  public Integer id;
}

Summary of test 'testLazy':

1 create Child(CHILD_ID)
2 save Child
3 create ParentLazy(PARENT_ID)
4 attach created Child
5 save ParentLazy
6 flush & clear session

assertEquals(CHILD_ID, ((ParentLazy) session.get(ParentLazy.class, PARENT_ID)).child.id); // fails with child.id == null

The eager version of this test works as expected:

@Entity
public class ParentEager {
  @Id
  public Integer    id;

  @OneToOne(fetch = FetchType.EAGER) @JoinColumn(name = "childId")
  public Child child;
}

... the same 6 steps using the ParentEager entity

assertEquals(CHILD_ID, ((ParentEager) s.get(ParentEager.class, PARENT_ID)).child.id); // succeeds


test-case2 is a test case written for the annonations project,
tested against: svn info
  URL: http://anonsvn.jboss.org/repos/hibernate/core/trunk
  Repository Root: http://anonsvn.jboss.org/repos/hibernate
  Revision: 16125



> failure to lazy load a manyToOne and oneToMany mapped entity
> ------------------------------------------------------------
>
>                 Key: HHH-3798
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3798
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 3.3.1, 3.5
>         Environment: hibernate annotations test case, maven profile hsqldb, svn rev 16079
> hibernate-core 3.3.1.GA, JBoss 4.2.3, SQLServer 2000
>            Reporter: Ronald Kurz
>         Attachments: test-case.tar.gz, test-case2.tar.gz
>
>
> Following situtation: an entity Data has Revision entities (oneToMany). Each Revision entity belongs to a Data entity. The Data entity has one manyToOne mapping to the current Revision. The mappings from Data to Revision are all lazy.
> When loading a Data entity, which has two Revisions, the Revision entity which is also mapped as manyToOne (the current Revision for that Data entity), does not get loaded. It will be an uninitialized proxy, which is also resistent to Hibernate.initialize(<Data>.revision). The same proxy is also in the oneToMany mapped list.
> @Entity
> public class Data {
>   @Id @GeneratedValue
>   public int id;
>   @ManyToOne(fetch = FetchType.LAZY)
>   @JoinColumn(name = "revisionId")
>   public Revision revision;
>   @OneToMany(mappedBy = "data")
>   public List<Revision> revisions = new ArrayList<Revision>();
> }
> @Entity
> public class Revision {
>   @Id @GeneratedValue
>   public int id;
>   @ManyToOne(fetch = FetchType.LAZY)
>   @JoinColumn(name = "dataId", nullable = false, updatable = false)
>   public Data    data;
>   public Integer number;
> }
> The test case is written for the hibernate-annotations project (simply because I never wrote a mapping using xml)

-- 
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