hibernate-reactive icon indicating copy to clipboard operation
hibernate-reactive copied to clipboard

Reactive find with lock in Quarkus with reactive hibernate - Issue reproduced

Open alexjaravete opened this issue 1 year ago • 1 comments

Hi, this is related to this issue https://github.com/hibernate/hibernate-reactive/issues/1896.

Hi, when using Quarkus with reactive hibernate and trying to run this findById(id, LockModeType.PESSIMISTIC_WRITE), I get following Error: JPA error: java.lang.UnsupportedOperationException The error seems to be coming from here: hibernate-reactive/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveLockEventListener.java Lines 238 to 241 in 5cb015d @Override public void onLock(LockEvent event) throws HibernateException { throw new UnsupportedOperationException(); } Is this intended, or is the implementation not finished? I can see that the last time this was edited was 4 years ago.

I was able to reproduce the issue when using a OneToMany and ManyToOne relationship. By doing this, hibernate is forced to do a JOIN and the SELECT FOR UDPATE cannot be done in the same request. When hibernate is trying to do the followup Lock, it throws an error.

The error should already show up after creating a Fruit and fetching it. No Owner object is needed. It's only there to trigger the issue.

This is the repository with the reproduced issue: https://github.com/alexjaravete/quarkus-quickstarts/tree/findById/hibernate-reactive-panache-quickstart

alexjaravete avatar May 02 '24 10:05 alexjaravete

Thanks for the project. I can see the error.

It seems quite complicated to solve, but I will give it a try

DavideD avatar May 02 '24 14:05 DavideD

Hi @alexjaravete ,

I tried to run your reproducer and all tests pass

dreab8 avatar Jan 22 '25 17:01 dreab8

@dreab8, do you mean that this work in Hibernate Reactive 3? Is it possible to add a unit test for this?

DavideD avatar Jan 23 '25 08:01 DavideD

@DavideD I tried with the reproducer provided by @alexjaravete that uses 2.2.2 and the tests pass

dreab8 avatar Jan 23 '25 09:01 dreab8

Added

@Test
    public void testGetFruit() {
       given()
                .when()
                .get("/fruits/1")
                .then()
                .statusCode(200);
    }

and the problem showed up.

Thanks @DavideD

dreab8 avatar Jan 23 '25 10:01 dreab8