[hibernate-dev] Too simple a solution for HHH-11147 ?
Vlad Mihalcea
mihalcea.vlad at gmail.com
Thu Sep 28 00:51:04 EDT 2017
Hi Thomas,
You can send a Pull Request. I'll ask Luis Barreiro to review it since he's
the expert in this area.
Thanks,
Vlad
On Thu, Sep 28, 2017 at 12:33 AM, Thomas Reinhardt <thomas at reinhardt.com>
wrote:
>
> Hello,
>
> I investigated HHH-11147 (Allow enhanced entities to be returned in a
> completely uninitialized state) and have a very small fix for that issue.
> I want your feedback if I am going the correct route here. Seems too
> easy and lazy loading is a pretty important piece of hibernate.
>
> To spare everyone opening the issue just to get an overview here is a
> short summary:
>
>
>
> The use case is an entity with a simple relation:
>
> @Entity
> @Proxy(lazy=true)
> class MyEntity {
> @ManyToOne(fetch=FetchType.LAZY)
> OtherEntity other;
> }
>
> Both entities are bytecode enhanced at compiletime with
> enableLazyInitialization=true. The problem is that the "other" entity is
> fetched despite being annotated as lazy.
>
>
>
> My quick fix is actually only two changed lines. A proper diff
> (HHH-11147-quick-and-dirty.diff) is attached to the issue. I did
> specifically not make a PR just for this discussion but if requested I
> can of course make one. A pseudo-diff can be found below.
>
> I did test this fix on our main application and it seems to work. There
> are two main questions:
> 1) could there be cases where we create a proxyFactory without need?
> 2) am I killing the benefits of the bytecode enhancement by using a
> proxy or do I still get things like association handling?
>
>
> Sorry for the wall of text but I thought this discussion does not belong
> in the issue itself. Correct me if I am wrong.
>
> Greetings,
> Thomas
>
>
>
> Pseudo-diff:
>
> org.hibernate.event.internal.DefaultLoadEventListener
> proxyOrLoad(LoadEvent, EntityPersister, EntityKey, LoadType) {
> ...
> // this class has no proxies (so do a shortcut)
> - if ( !persister.hasProxy() ) {
> + if ( !persister.getEntityMetamodel().isLazy() ) {
> return load( event, persister, keyToLoad, options );
> ...
> }
>
>
>
> org.hibernate.tuple.entity.AbstractEntityTuplizer
> public AbstractEntityTuplizer(...) {
> ...
> instantiator = buildInstantiator( entityMetamodel, mappingInfo );
> - if ( entityMetamodel.isLazy() &&
> - !entityMetamodel.getBytecodeEnhancementMetadata()
> - .isEnhancedForLazyLoading() ) {
> + if ( entityMetamodel.isLazy() ) {
> proxyFactory = buildProxyFactory( ... );
> ...
> }
>
>
> _______________________________________________
> 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