On 16 May 2012 16:15, Scott Marlow <smarlow(a)redhat.com> wrote:
On 05/16/2012 11:00 AM, Scott Marlow wrote:
> On 05/16/2012 10:16 AM, Emmanuel Bernard wrote:
>>
>> On 16 mai 2012, at 14:28, Scott Marlow wrote:
>>
>>> According to JPA 2.0 specification section 3.2.7.1, when merging a
>>> detached entity with lazy associations that haven't been fetched:
>>>
>>> "
>>> The persistence provider must not merge fields marked LAZY that have not
>>> been fetched: it must ignore such fields when merging.
>>> "
>>>
>>>
>>> After merging an entity, will accessing one of the entities LAZY fields
>>> (that was previously not fetched) result in a lazy initialization error
>>> or will we try to fetch from the database?
>>
>> The latter.
>
> The latter isn't working for me yet (I get a
> "LazyInitializationException: failed to lazily initialize a collection
> of role"), I'll try recreating in a Hibernate ORM test case.
Steve pointed out that the entity passed into EntityManager.merge() will
not be attached, instead the merged state is returned and should be
used. After I adjusted for that, I can access the lazy field. :)
that's one of my favourites.
Ignoring the return value of #merge() is an extreme common problem,
I've seen it done by many developers frequently at both trainings and
consulting cases and it often kills the whole JPA experience. I blame
the method name, it's really unexpected it even has a return value.