From c3f5d6d0701bd95e26763957209c9d7ea874703e Mon Sep 17 00:00:00 2001 From: Gavin King Date: Wed, 19 Nov 2025 20:15:20 +0100 Subject: [PATCH] remove() is documented to throw IllegalArgumentException not HibernateException --- .../DefaultReactiveDeleteEventListener.java | 2 +- .../DefaultReactiveLockEventListener.java | 2 +- .../impl/ReactiveExceptionConverter.java | 32 ------------------- .../impl/ReactiveSessionFactoryImpl.java | 6 ---- .../session/impl/ReactiveSessionImpl.java | 12 ------- .../hibernate/reactive/MutinySessionTest.java | 2 +- .../reactive/ReactiveSessionTest.java | 7 ++-- 7 files changed, 6 insertions(+), 57 deletions(-) delete mode 100644 hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveExceptionConverter.java diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveDeleteEventListener.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveDeleteEventListener.java index 1dbf6db02..ee5d7eb36 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveDeleteEventListener.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveDeleteEventListener.java @@ -195,7 +195,7 @@ private CompletionStage fetchAndDelete(DeleteEvent event, DeleteContext tr : !source.contains( objectEvent ); if ( detached ) { // Hibernate Reactive doesn't support detached instances in remove() - throw new IllegalArgumentException( "unmanaged instance passed to remove()" ); + throw new IllegalArgumentException( "Unmanaged instance passed to remove()" ); } //Object entity = persistenceContext.unproxyAndReassociate( event.getObject() ); diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveLockEventListener.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveLockEventListener.java index ffd0fcfde..ac3379ff5 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveLockEventListener.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveLockEventListener.java @@ -73,7 +73,7 @@ public CompletionStage reactiveOnLock(LockEvent event) throws HibernateExc : !source.contains( event.getObject() ); if ( detached ) { // Hibernate Reactive doesn't support detached instances in refresh() - throw new IllegalArgumentException( "unmanaged instance passed to refresh()" ); + throw new IllegalArgumentException( "Unmanaged instance passed to refresh()" ); } diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveExceptionConverter.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveExceptionConverter.java deleted file mode 100644 index ca984b9fe..000000000 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveExceptionConverter.java +++ /dev/null @@ -1,32 +0,0 @@ -/* Hibernate, Relational Persistence for Idiomatic Java - * - * SPDX-License-Identifier: Apache-2.0 - * Copyright: Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.reactive.session.impl; - -import org.hibernate.HibernateException; -import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.internal.ExceptionConverterImpl; - -/** - * Handle exceptions and convert them following the logic used in Hibernate ORM. - *

- * It converts the exception to a {@link HibernateException} or a - * {@link jakarta.persistence.PersistenceException}. - * - * @see org.hibernate.engine.spi.ExceptionConverter - */ -public class ReactiveExceptionConverter extends ExceptionConverterImpl { - public ReactiveExceptionConverter(SharedSessionContractImplementor sharedSessionContract) { - super( sharedSessionContract ); - } - - @Override - public RuntimeException convert(RuntimeException e) { - if ( !( e instanceof HibernateException ) ) { - return super.convert( new HibernateException( e ) ); - } - return super.convert( e ); - } -} diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveSessionFactoryImpl.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveSessionFactoryImpl.java index 6a688b6dc..a16391af0 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveSessionFactoryImpl.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveSessionFactoryImpl.java @@ -9,7 +9,6 @@ import org.hibernate.boot.spi.MetadataImplementor; import org.hibernate.boot.spi.SessionFactoryOptions; import org.hibernate.internal.SessionFactoryImpl; -import org.hibernate.query.spi.QueryEngine; import org.hibernate.reactive.boot.spi.ReactiveMetadataImplementor; import org.hibernate.reactive.mutiny.Mutiny; import org.hibernate.reactive.mutiny.impl.MutinySessionFactoryImpl; @@ -29,11 +28,6 @@ public ReactiveSessionFactoryImpl(MetadataImplementor bootMetamodel, SessionFact super( new ReactiveMetadataImplementor( bootMetamodel ), options, bootstrapContext ); } - @Override - public QueryEngine getQueryEngine() { - return super.getQueryEngine(); - } - @Override public T unwrap(Class type) { if ( type.isAssignableFrom( Stage.SessionFactory.class ) ) { diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveSessionImpl.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveSessionImpl.java index 0ecd4f266..b089c4137 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveSessionImpl.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveSessionImpl.java @@ -36,7 +36,6 @@ import org.hibernate.engine.spi.EffectiveEntityGraph; import org.hibernate.engine.spi.EntityEntry; import org.hibernate.engine.spi.EntityKey; -import org.hibernate.engine.spi.ExceptionConverter; import org.hibernate.engine.spi.PersistenceContext; import org.hibernate.engine.spi.PersistentAttributeInterceptable; import org.hibernate.engine.spi.PersistentAttributeInterceptor; @@ -167,9 +166,6 @@ public class ReactiveSessionImpl extends SessionImpl implements ReactiveSession, private ReactiveConnection reactiveConnection; private final Thread associatedWorkThread; - //Lazily initialized - private transient ExceptionConverter exceptionConverter; - public ReactiveSessionImpl(SessionFactoryImpl delegate, SessionCreationOptions options, ReactiveConnection connection) { super( delegate, options ); InternalStateAssertions.assertUseOnEventLoop(); @@ -1128,14 +1124,6 @@ private CompletionStage doFlush() { } ); } - @Override - public ExceptionConverter getExceptionConverter() { - if ( exceptionConverter == null ) { - exceptionConverter = new ReactiveExceptionConverter( this ); - } - return exceptionConverter; - } - @Override public CompletionStage reactiveRefresh(Object entity, LockOptions lockOptions) { checkOpen(); diff --git a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/MutinySessionTest.java b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/MutinySessionTest.java index 6fecfbb85..b1aeed3be 100644 --- a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/MutinySessionTest.java +++ b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/MutinySessionTest.java @@ -306,7 +306,7 @@ context, populateDB() session.remove( new GuineaPig( 5, "Aloi" ) ) ) ) .invoke( e -> assertThat( e ) - .hasMessageContaining( "unmanaged instance passed to remove" ) + .hasMessageContaining( "Unmanaged instance passed to remove" ) ) ); } diff --git a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/ReactiveSessionTest.java b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/ReactiveSessionTest.java index d83cb64cd..ae0a86233 100644 --- a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/ReactiveSessionTest.java +++ b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/ReactiveSessionTest.java @@ -10,7 +10,6 @@ import java.util.concurrent.CompletionException; import java.util.concurrent.CompletionStage; -import org.hibernate.HibernateException; import org.hibernate.LockMode; import org.hibernate.reactive.common.AffectedEntities; import org.hibernate.reactive.mutiny.Mutiny; @@ -725,11 +724,11 @@ public void reactiveRemoveTransientEntity(VertxTestContext context) { .thenCompose( v -> selectNameFromId( 5 ) ) .thenAccept( result -> assertThat( result ).isNotNull() ) .thenCompose( v -> openSession() ) - .thenCompose( session -> assertThrown( HibernateException.class, session.remove( new GuineaPig( 5, "Aloi" ) ) ) + .thenCompose( session -> assertThrown( IllegalArgumentException.class, session.remove( new GuineaPig( 5, "Aloi" ) ) ) ) .thenAccept( t -> assertThat( t ) - .hasCauseInstanceOf( IllegalArgumentException.class ) - .hasMessageContaining( "unmanaged instance" ) + .isInstanceOf( IllegalArgumentException.class ) + .hasMessageContaining( "Unmanaged instance" ) ) ); }