[hibernate-dev] Should EntityManager#refresh retain an existing lock?

Vlad Mihalcea mihalcea.vlad at gmail.com
Thu Feb 1 08:39:53 EST 2018


Hi Gail,

Steve is right. Database locks cannot be released unless you end the
transaction and that's how it works on any RDBMS, either in 2PL Mode or
MVCC.

As for optimistic locks:

1. LockModeType.OPTIMISTIC

The check is done at the end of the end of the transaction. Refresh will
only update the version, but the check should still be done so we should
not probably switch to LockModeTypeNONE.

2. OPTIMISTIC_FORCE_INCREMENT,

This one triggers a version increment in a different entity, so it should
not be affected by the refresh of our entity.

Vlad

On Thu, Feb 1, 2018 at 1:12 AM, Gail Badner <gbadner at redhat.com> wrote:

> OK, sounds good.
>
> Thanks,
> Gail
>
> On Wed, Jan 31, 2018 at 2:38 PM, Steve Ebersole <steve at hibernate.org>
> wrote:
>
> > It is possible to call EntityManager#lock(Object entity, LockModeType
> >> lockMode) with a lower-level lock, but that request will be ignored.
> >> Hibernate will only upgrade a lock.
> >>
> >
> > Sure, this is in keeping with most (all?) databases - a transaction can
> > only acquire more restrictive locks.
> >
> >
> >
> >> I think that clarifies retaining the same lock-level for the entity when
> >> calling EntityManager#refresh(Object entity).
> >>
> >> If no one has any comments that disagree with this in the next couple of
> >> days, I'll go with that.
> >>
> >
> > That's the correct handling.
> >
> >
> _______________________________________________
> 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