@Test public void testPessimisticNoWait() { LOGGER.info("Test PESSIMISTIC_READ blocks PESSIMISTIC_WRITE, NO WAIT fails fast"); Post post = doInJPA(entityManager -> { return entityManager.find(Post.class, 1L); }); doInJPA(entityManager -> { entityManager.unwrap( Session.class ).lock(post, LockMode.PESSIMISTIC_WRITE); executeSync( () -> { doInJPA(_entityManager -> { try { _entityManager .unwrap(Session.class) .buildLockRequest( new LockOptions(LockMode.PESSIMISTIC_WRITE) .setTimeOut(LockOptions.NO_WAIT)) .lock(post); fail("Should throw PessimisticEntityLockException"); } catch (PessimisticEntityLockException expected) { //This is expected since the first transaction already acquired this lock } }); } ); }); }