From b7a24c2847422ab3805ed455769e4a1c37c20839 Mon Sep 17 00:00:00 2001 From: Gavin King Date: Sat, 19 Apr 2025 17:57:19 +0200 Subject: [PATCH 1/3] HHH-19375 improve test for whether we should use Quarkus injection also look for io.quarkus.hibernate.reactive --- .../java/org/hibernate/processor/HibernateProcessor.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/HibernateProcessor.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/HibernateProcessor.java index c0d829acb4f1..6ab92c1c15b9 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/HibernateProcessor.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/HibernateProcessor.java @@ -230,6 +230,9 @@ private boolean handleSettings(ProcessingEnvironment environment) { final PackageElement quarkusOrmPackage = context.getProcessingEnvironment().getElementUtils() .getPackageElement( "io.quarkus.hibernate.orm" ); + final PackageElement quarkusReactivePackage = + context.getProcessingEnvironment().getElementUtils() + .getPackageElement( "io.quarkus.hibernate.reactive.runtime" ); PackageElement quarkusOrmPanachePackage = context.getProcessingEnvironment().getElementUtils() @@ -252,7 +255,7 @@ && packagePresent(quarkusOrmPanachePackage) ) { context.setAddGeneratedAnnotation( packagePresent(jakartaAnnotationPackage) ); context.setAddDependentAnnotation( packagePresent(jakartaContextPackage) ); context.setAddTransactionScopedAnnotation( packagePresent(jakartaTransactionPackage) ); - context.setQuarkusInjection( packagePresent(quarkusOrmPackage) ); + context.setQuarkusInjection( packagePresent(quarkusOrmPackage) || packagePresent(quarkusReactivePackage) ); context.setUsesQuarkusOrm( packagePresent(quarkusOrmPanachePackage) ); context.setUsesQuarkusReactive( packagePresent(quarkusReactivePanachePackage) ); From b9419e08c8141a5fafc52eed352e3e42228f39e8 Mon Sep 17 00:00:00 2001 From: Gavin King Date: Sun, 20 Apr 2025 12:23:55 +0200 Subject: [PATCH 2/3] HHH-19374 make repositories always @Dependent-scoped I don't love this at all -- see the comment :-/ --- .../annotation/AnnotationMetaEntity.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) 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 00711e7fe226..2429c83de1bb 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 @@ -349,14 +349,15 @@ public boolean isInjectable() { @Override public String scope() { - if (jakartaDataRepository) { - return context.addTransactionScopedAnnotation() - ? "jakarta.transaction.TransactionScoped" - : "jakarta.enterprise.context.RequestScoped"; - } - else { - return "jakarta.enterprise.context.Dependent"; - } + // @TransactionScoped doesn't work here because repositories + // are supposed to be able to demarcate transactions, which + // means they should be injectable when there is no active tx + // @RequestScoped doesn't work because Arc folks think this + // scope should only be active during a HTTP request, which + // is simply wrong according to me, but whatever + // @ApplicationScoped could work in principle, but buys us + // nothing additional, since repositories are stateless + return "jakarta.enterprise.context.Dependent"; } @Override From 68eb73bae3bf3d49d05744148bf1154a3583bce2 Mon Sep 17 00:00:00 2001 From: Gavin King Date: Sun, 4 May 2025 10:54:33 +0200 Subject: [PATCH 3/3] HHH-19425 fix missing '.class' when annotations copied to repo implementations --- .../src/main/java/org/hibernate/processor/ClassWriter.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/ClassWriter.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/ClassWriter.java index 6187066f6c22..f7a6479b5574 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/ClassWriter.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/ClassWriter.java @@ -15,6 +15,7 @@ import javax.lang.model.element.ElementKind; import javax.lang.model.element.TypeElement; import javax.lang.model.element.VariableElement; +import javax.lang.model.type.TypeMirror; import javax.tools.Diagnostic; import javax.tools.FileObject; import java.io.IOException; @@ -174,6 +175,10 @@ else if (argument instanceof AnnotationMirror) { AnnotationMirror childAnnotation = (AnnotationMirror) argument; printAnnotation( childAnnotation, pw ); } + else if (argument instanceof TypeMirror) { + pw.print(argument); + pw.print(".class"); + } else if (argument instanceof List) { final List list = (List) argument;