diff --git a/tooling/metamodel-generator/hibernate-processor.gradle b/tooling/metamodel-generator/hibernate-processor.gradle index 7570e319f331..51ba5d86fd50 100644 --- a/tooling/metamodel-generator/hibernate-processor.gradle +++ b/tooling/metamodel-generator/hibernate-processor.gradle @@ -57,11 +57,11 @@ dependencies { api libs.byteBuddy api libs.logging - quarkusOrmPanacheImplementation "io.quarkus:quarkus-hibernate-orm-panache:3.6.2" - quarkusHrPanacheImplementation "io.quarkus:quarkus-hibernate-reactive-panache:3.6.2" + quarkusOrmPanacheImplementation "io.quarkus:quarkus-hibernate-orm-panache:3.24.1" + quarkusHrPanacheImplementation "io.quarkus:quarkus-hibernate-reactive-panache:3.24.1" jakartaDataImplementation "jakarta.data:jakarta.data-api:1.0.0" - jakartaDataImplementation "org.hibernate.reactive:hibernate-reactive-core:2.2.2.Final" - jakartaDataImplementation "io.quarkus:quarkus-hibernate-orm-panache:3.6.2" + jakartaDataImplementation "org.hibernate.reactive:hibernate-reactive-core:3.0.1.Final" + jakartaDataImplementation "io.quarkus:quarkus-hibernate-orm-panache:3.24.1" } // The source set gets a custom configuration which extends the normal test implementation config diff --git a/tooling/metamodel-generator/src/jakartaData/java/org/hibernate/processor/test/data/reactive/ReactiveTest.java b/tooling/metamodel-generator/src/jakartaData/java/org/hibernate/processor/test/data/reactive/ReactiveTest.java index 542306b196e0..094ea9207bb7 100644 --- a/tooling/metamodel-generator/src/jakartaData/java/org/hibernate/processor/test/data/reactive/ReactiveTest.java +++ b/tooling/metamodel-generator/src/jakartaData/java/org/hibernate/processor/test/data/reactive/ReactiveTest.java @@ -16,7 +16,7 @@ */ public class ReactiveTest extends CompilationTest { @Test - @WithClasses({ Publisher.class, Author.class, Address.class, Book.class, Library.class, Library2.class }) + @WithClasses({ Publisher.class, Author.class, Address.class, Book.class, Library.class, Library2.class, RepoWithPrimary.class }) public void test() { System.out.println( getMetaModelSourceAsString( Author.class ) ); System.out.println( getMetaModelSourceAsString( Book.class ) ); diff --git a/tooling/metamodel-generator/src/jakartaData/java/org/hibernate/processor/test/data/reactive/RepoWithPrimary.java b/tooling/metamodel-generator/src/jakartaData/java/org/hibernate/processor/test/data/reactive/RepoWithPrimary.java new file mode 100644 index 000000000000..832be0cfe804 --- /dev/null +++ b/tooling/metamodel-generator/src/jakartaData/java/org/hibernate/processor/test/data/reactive/RepoWithPrimary.java @@ -0,0 +1,22 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.processor.test.data.reactive; + +import io.smallrye.mutiny.Uni; +import jakarta.data.repository.Delete; +import jakarta.data.repository.Insert; +import jakarta.data.repository.Repository; +import org.hibernate.reactive.mutiny.Mutiny; + +@Repository +public interface RepoWithPrimary { + Uni session(); //required + @Insert + Uni insert(Book book); + @Delete + Uni delete(Book book); + @Delete + Uni deleteById(String isbn); +} diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractCriteriaMethod.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractCriteriaMethod.java index 8639056e6969..26e904b75ab1 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractCriteriaMethod.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractCriteriaMethod.java @@ -137,11 +137,7 @@ void createCriteriaQuery(StringBuilder declaration) { private void createBuilder(StringBuilder declaration) { declaration .append("\tvar _builder = ") - .append(localSessionName()); - if ( isReactive() ) { - declaration.append(".getFactory()"); - } - declaration + .append(localSessionName()) .append(".getCriteriaBuilder();\n"); } diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java index eca690965215..4eba3ffa44ae 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java @@ -1494,20 +1494,42 @@ else if ( hasAnnotation( method, JD_DELETE ) ) { private void addDeleteMethod(ExecutableElement method, @Nullable TypeMirror returnType) { if ( returnType != null ) { - final TypeKind kind = returnType.getKind(); - if ( kind != TypeKind.VOID - && kind != TypeKind.INT - && kind != TypeKind.LONG ) { - message(method, - "must be 'void' or return 'int' or 'long'", - Diagnostic.Kind.ERROR); + if ( isReactive() + ? isLegalReactiveDeleteReturnType(returnType) + : isLegalDeleteReturnType(returnType) ) { + createCriteriaDelete(method); } else { - createCriteriaDelete(method); + message(method, + isReactive() + ? "must be 'Uni' or 'Uni'" + : "must be 'void' or return 'int' or 'long'", + Diagnostic.Kind.ERROR); } } } + private static boolean isLegalDeleteReturnType(TypeMirror returnType) { + final TypeKind kind = returnType.getKind(); + return kind == TypeKind.VOID + || kind == TypeKind.INT + || kind == TypeKind.LONG; + } + + private static boolean isLegalReactiveDeleteReturnType(TypeMirror returnType) { + final TypeKind kind = returnType.getKind(); + if ( kind == TypeKind.DECLARED ) { + final DeclaredType type = (DeclaredType) returnType; + final TypeElement typeElement = (TypeElement) type.asElement(); + final Name name = typeElement.getQualifiedName(); + return name.contentEquals( Void.class.getName() ) + || name.contentEquals( Integer.class.getName() ); + } + else { + return false; + } + } + private void addLifecycleMethod(ExecutableElement method) { final TypeMirror returnType = unUniIfPossible( method, method.getReturnType() ); if ( method.getParameters().size() != 1 ) { diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/CriteriaDeleteMethod.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/CriteriaDeleteMethod.java index 02fa0836fa71..ed78a0c4b9b8 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/CriteriaDeleteMethod.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/CriteriaDeleteMethod.java @@ -62,8 +62,10 @@ void executeQuery(StringBuilder declaration, List paramTypes) { } void tryReturn(StringBuilder declaration) { - declaration - .append("\n\ttry {\n\t\t"); + if ( !isReactive() ) { + declaration + .append("\n\ttry {\n\t\t"); + } if ( !"void".equals(fullReturnType) ) { declaration .append("return "); @@ -72,7 +74,7 @@ void tryReturn(StringBuilder declaration) { @Override String createQueryMethod() { - return isUsingEntityManager() || isReactive() + return isUsingEntityManager() ? "createQuery" : "createMutationQuery"; } @@ -85,6 +87,11 @@ String specificationType() { private void execute(StringBuilder declaration) { declaration .append("\t\t\t.executeUpdate()"); + if ( isReactive() ) { + if ( fullReturnType.endsWith("") ) {} + declaration + .append(".replaceWithVoid()"); + } } @Override