[hibernate-dev] Lazy attribute loading group support

Steve Ebersole steve at hibernate.org
Mon Nov 16 16:09:52 EST 2015


Regarding HHH-10267...

5.1 will include a new feature allowing users to specify groups for
(bytecode enhanced) lazy attribute loading.  In the original support
accessing one of these lazy attributes forced them all to be loaded[1].
For example...

@Entity
public class Company {
    ...
    @Basic( fetch = FetchType.LAZY )
    private String taxIdNumber;
    @Lob
    @Basic( fetch = FetchType.LAZY )
    private Blob logo;
}

Once an application accessed any of the lazy attributes, they were all
loaded/initialized.  So accessing `getTaxIdNumber()` would force `logo` to
be fetched as well.  The new feature here is the ability to segment
attributes into different groups for lazy loading:

@Entity
public class Company {
    ...
    @Basic( fetch = FetchType.LAZY )
    private String taxIdNumber;
    @Lob
    @Basic( fetch = FetchType.LAZY )
    @LazyGroup( "lobs" )
    private Blob logo;
}

`@LazyGroup( "lobs" )` designates that `logo` is part of a specific fetch
group.  Now, when the application accesses `getTaxIdNumber()`, `logo` is no
longer fetched at the same time.

P.S. A related question is this idea of
`@LazyToOne(LazyToOneOption.NO_PROXY)`.  At the moment that is still needed
for "legacy reasons".  The underlying reason is that we don't (didn't) know
when the to-one container is enhanced, so we rely on the user telling us.
I'd like to plan on dropping the requirement for the user to tell us this.
If they are using enhancement I am 99% certain they want NO_PROXY so it
seems redundant to make them tell us.  Unless I am missing some use case.
Any thoughts?

[1] Technically the legacy bytecode enhancement treated collections
differently than other attribute types in this regard.  The new enhancement
does the same as the default.


More information about the hibernate-dev mailing list