[hibernate-dev] Hibernate#isPropertyInitialized vs Hibernate#isInitialized

Steve Ebersole steve at hibernate.org
Thu Mar 9 13:24:57 EST 2017


Maybe this helps:

   1. the attribute is not loaded at all (no PersistentCollection creation)
   1. Hibernate.isPropertyInitialized( enhancedEntity,
      "extraLazyCollection" ) -> returns false
      2. Hibernate.isInitialized( enhancedEntity.getExtraLazyCollection() )
      -> irrelevant, the getExtraLazyCollection() call leads to creation of the
      PersistentCollection (see 2.2)
      2. the attribute is loaded, but the elements are not loaded
   1. Hibernate.isPropertyInitialized( enhancedEntity,
      "extraLazyCollection" ) -> returns true
      2. Hibernate.isInitialized( enhancedEntity.getExtraLazyCollection() )
      -> returns false
   3. the attribute is loaded and the elements are loaded
   1. Hibernate.isPropertyInitialized( enhancedEntity,
      "extraLazyCollection" ) -> returns true
      2. Hibernate.isInitialized( enhancedEntity.getExtraLazyCollection() )
      -> returns true

IIUC you are asking whether 2.1 returning true is conceptually accurate.
Yes?

Perhaps we want to distinguish between initialized and loaded?  I think
that is generally applicable.

On Thu, Mar 9, 2017 at 11:55 AM Gail Badner <gbadner at redhat.com> wrote:

> Oops, sorry for the confusion. They should have referred to
> Hibernate#isInitialized.
>
> I'll fix and clarify below...
>
> On Thu, Mar 9, 2017 at 4:58 AM, Steve Ebersole <steve at hibernate.org>
> wrote:
>
> Your subject says `Hibernate#isInitialized` but then your examples refer
> to `Hibernate#initialize`.  Which are your referring to?  Because in some
> cases you genuinely seem to be referring to `#initialize`, but then you
> keep referring to its return value - `#initialize` has no return.
>
>
> On Thu, Mar 9, 2017 at 12:27 AM Gail Badner <gbadner at redhat.com> wrote:
>
> I think there can be an inconsistency between
> Hibernate#isPropertyInitialized vs Hibernate#isInitialized when it comes to
> an extra-lazy collection of an enhanced entity.
>
> IIUC, after fixing HHH-11161 [1], if an extra-lazy collection is accessed
> on an enhanced entity, the collection property is set to an uninitialized
> PersistentCollection and calling Hibernate#isPropertyInitialized(
> collectionfieldName ) will return true, even though the collection itself
> is uninitialized.
>
> I would have expected that false would be returned.
>
> I've added a comment to the issue and asked Luis about it. Luis has pointed
> out the 3 stages of an extra-lazy collection on an enhanced entity. I've
>
> listed them below and added my understanding of what
> Hibernate#isInitialized
>
>
> and Hibernate#isPropertyInitialized will return in each instance:
>
> 1) the attribute is not loaded at all;
>     Hibernate.isPropertyInitialized( enhancedEntity, "extraLazyCollection"
> )
> returns false;
>
>     (I am skipping an example of calling Hibernate.isInitialized(
> enhancedEntity.getExtraLazyCollection() )
>
>            here because by calling
> enhancedEntity.getExtraLazyCollection(), the property becomes initalized
>            with an uninitialized PersistentCollection, so it will be in
> the state described as 2).
>
>
> 2) the attribute is loaded, but the elements are not loaded;
>     Hibernate.isPropertyInitialized( enhancedEntity, "extraLazyCollection"
> )
> returns true,
>     because the property is initialized to a PersistentCollection (even
> though the PersistentCollection itself is uninitialized).
>
>   Hibernate.isInitialized( enhancedEntity.getExtraLazyCollection() )
> returns
> false.
>
>
>
> 3) the attribute is loaded and the elements are loaded.
>   Hibernate.isPropertyInitialized( enhancedEntity, "extraLazyCollection" )
> returns true.
>
>   Hibernate.isInitialized( enhancedEntity.getExtraLazyCollection() )
> returns
>
>
> true.
>
> Opinions about the inconsistency in 2)? Is this a bug in the code or in the
> Javadoc?
>
> Thanks,
> Gail
>
> [1] https://hibernate.atlassian.net/browse/HHH-11161
>
> _______________________________________________
> 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