diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java index 53bbc4c896..b02d619243 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java @@ -92,15 +92,15 @@ public final class ClassWriter { try ( PrintWriter pw = new PrintWriter(sw) ) { if ( context.addDependentAnnotation() && entity.isInjectable() ) { - pw.println( writeDependentAnnotation( entity ) ); + pw.println( writeScopeAnnotation( entity ) ); } - if ( entity.getElement() instanceof TypeElement ) { + if ( entity.getElement() instanceof TypeElement && !entity.isInjectable() ) { pw.println( writeStaticMetaModelAnnotation( entity, context ) ); } if ( context.addGeneratedAnnotation() ) { pw.println( writeGeneratedAnnotation( entity, context ) ); } - if ( context.isAddSuppressWarningsAnnotation() ) { + if ( context.addSuppressWarningsAnnotation() ) { pw.println( writeSuppressWarnings() ); } @@ -235,8 +235,8 @@ public final class ClassWriter { return "@SuppressWarnings({\"deprecation\", \"rawtypes\"})"; } - private static String writeDependentAnnotation(Metamodel entity) { - return "@" + entity.importType( "jakarta.enterprise.context.Dependent" ); + private static String writeScopeAnnotation(Metamodel entity) { + return "@" + entity.importType( entity.scope() ); } private static String writeStaticMetaModelAnnotation(Metamodel entity, Context context) { diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/Context.java b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/Context.java index 7268b811cf..9d990658f5 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/Context.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/Context.java @@ -73,6 +73,7 @@ public final class Context { private boolean addGeneratedAnnotation = true; private boolean addGenerationDate; private boolean addSuppressWarningsAnnotation; + private boolean addTransactionScopedAnnotation; private AccessType persistenceUnitDefaultAccessType; private boolean jakartaDataStyle; @@ -167,7 +168,7 @@ public final class Context { this.addGenerationDate = addGenerationDate; } - public boolean isAddSuppressWarningsAnnotation() { + public boolean addSuppressWarningsAnnotation() { return addSuppressWarningsAnnotation; } @@ -175,6 +176,14 @@ public final class Context { this.addSuppressWarningsAnnotation = addSuppressWarningsAnnotation; } + public boolean addTransactionScopedAnnotation() { + return addTransactionScopedAnnotation; + } + + public void setAddTransactionScopedAnnotation(boolean addTransactionScopedAnnotation) { + this.addTransactionScopedAnnotation = addTransactionScopedAnnotation; + } + public Elements getElementUtils() { return processingEnvironment.getElementUtils(); } diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java index 0cf0052954..d62738ce92 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java @@ -149,11 +149,15 @@ public class JPAMetaModelEntityProcessor extends AbstractProcessor { final PackageElement jakartaContextPackage = context.getProcessingEnvironment().getElementUtils() .getPackageElement( "jakarta.enterprise.context" ); + final PackageElement jakartaTransactionsPackage = + context.getProcessingEnvironment().getElementUtils() + .getPackageElement( "jakarta.transactions" ); context.setAddInjectAnnotation( jakartaInjectPackage != null ); context.setAddNonnullAnnotation( jakartaAnnotationPackage != null ); context.setAddGeneratedAnnotation( jakartaAnnotationPackage != null ); context.setAddDependentAnnotation( jakartaContextPackage != null ); + context.setAddTransactionScopedAnnotation( jakartaTransactionsPackage != null ); final Map options = environment.getOptions(); diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMeta.java b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMeta.java index 4c98aea8a1..24250d48ef 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMeta.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMeta.java @@ -110,7 +110,7 @@ public abstract class AnnotationMeta implements Metamodel { this, (SqmSelectStatement) statement, name.substring(1), - belongsToDao(), + isRepository(), getSessionType(), getSessionVariableName(), getContext().addNonnullAnnotation() @@ -167,7 +167,7 @@ public abstract class AnnotationMeta implements Metamodel { return "entityManager"; } - abstract boolean belongsToDao(); + abstract boolean isRepository(); abstract @Nullable String getSessionType(); diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java index ee7397545e..5188bba22d 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java @@ -139,7 +139,7 @@ public class AnnotationMetaEntity extends AnnotationMeta { /** * True if this "metamodel class" is actually an instantiable DAO-style repository. */ - private boolean dao = false; + private boolean repository = false; /** * The type of the "session getter" method of a DAO-style repository. @@ -179,7 +179,7 @@ public class AnnotationMetaEntity extends AnnotationMeta { @Override public boolean isImplementation() { - return dao; + return repository; } @Override @@ -265,8 +265,8 @@ public class AnnotationMetaEntity extends AnnotationMeta { } @Override - boolean belongsToDao() { - return dao; + boolean isRepository() { + return repository; } @Override @@ -276,7 +276,19 @@ public class AnnotationMetaEntity extends AnnotationMeta { @Override public boolean isInjectable() { - return dao; + return repository; + } + + @Override + public String scope() { + if (dataRepository) { + return context.addTransactionScopedAnnotation() + ? "javax.transaction.TransactionScoped" + : "jakarta.enterprise.context.RequestScoped"; + } + else { + return "jakarta.enterprise.context.Dependent"; + } } @Override @@ -316,11 +328,14 @@ public class AnnotationMetaEntity extends AnnotationMeta { dataRepository = hasAnnotation( element, JD_REPOSITORY ); findSessionGetter( element ); - if ( !dao && dataRepository) { - dao = true; + if ( !repository && dataRepository) { + repository = true; sessionType = HIB_STATELESS_SESSION; addDaoConstructor( null ); } + if ( dataRepository ) { + addDefaultConstructor(); + } if ( managed ) { putMember( "class", new AnnotationMetaType(this) ); @@ -340,6 +355,20 @@ public class AnnotationMetaEntity extends AnnotationMeta { initialized = true; } + private void addDefaultConstructor() { + final String sessionVariableName = getSessionVariableName(sessionType); + final String typeName = element.getSimpleName().toString() + '_'; + putMember("_", new DefaultConstructor( + this, + typeName, + sessionVariableName, + sessionType, + sessionVariableName, + dataStore(), + context.addInjectAnnotation() + )); + } + private @Nullable String dataStore() { final AnnotationMirror repo = getAnnotationMirror( element, JD_REPOSITORY ); if ( repo != null ) { @@ -357,11 +386,11 @@ public class AnnotationMetaEntity extends AnnotationMeta { && !hasAnnotation( type, Constants.EMBEDDABLE ) ) { for ( ExecutableElement method : methodsIn( type.getEnclosedElements() ) ) { if ( isSessionGetter( method ) ) { - dao = true; + repository = true; sessionType = addDaoConstructor( method ); } } - if ( !dao ) { + if ( !repository) { final TypeMirror superclass = type.getSuperclass(); if ( superclass.getKind() == TypeKind.DECLARED ) { final DeclaredType declaredType = (DeclaredType) superclass; @@ -388,7 +417,7 @@ public class AnnotationMetaEntity extends AnnotationMeta { final String name = method == null ? sessionVariableName : method.getSimpleName().toString(); final String typeName = element.getSimpleName().toString() + '_'; putMember( name, - new DaoConstructor( + new RepositoryConstructor( this, typeName, name, @@ -397,7 +426,8 @@ public class AnnotationMetaEntity extends AnnotationMeta { dataStore(), context.addInjectAnnotation(), context.addNonnullAnnotation(), - method != null + method != null, + dataRepository ) ); return sessionType; @@ -751,7 +781,7 @@ public class AnnotationMetaEntity extends AnnotationMeta { paramNames, paramTypes, parameterNullability(method, entity), - dao, + repository, sessionType[0], sessionType[1], enabledFetchProfiles( method ), @@ -906,7 +936,7 @@ public class AnnotationMetaEntity extends AnnotationMeta { paramNames, paramTypes, parameterNullability(method, entity), - dao, + repository, sessionType[0], sessionType[1], enabledFetchProfiles( method ), @@ -925,7 +955,7 @@ public class AnnotationMetaEntity extends AnnotationMeta { paramNames, paramTypes, parameterNullability(method, entity), - dao, + repository, sessionType[0], sessionType[1], enabledFetchProfiles( method ), @@ -959,7 +989,7 @@ public class AnnotationMetaEntity extends AnnotationMeta { returnType.toString(), paramNames, paramTypes, - dao, + repository, sessionType[0], sessionType[1], profiles, @@ -977,7 +1007,7 @@ public class AnnotationMetaEntity extends AnnotationMeta { paramNames, paramTypes, parameterNullability(method, entity), - dao, + repository, sessionType[0], sessionType[1], profiles, @@ -996,7 +1026,7 @@ public class AnnotationMetaEntity extends AnnotationMeta { paramNames, paramTypes, parameterNullability(method, entity), - dao, + repository, sessionType[0], sessionType[1], profiles, @@ -1233,7 +1263,7 @@ public class AnnotationMetaEntity extends AnnotationMeta { paramTypes, isInsertUpdateDelete( queryString ), isNative, - dao, + repository, sessionType[0], sessionType[1], context.addNonnullAnnotation(), diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaPackage.java b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaPackage.java index d1d9959f4b..c459c42153 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaPackage.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaPackage.java @@ -136,7 +136,7 @@ public class AnnotationMetaPackage extends AnnotationMeta { } @Override - boolean belongsToDao() { + boolean isRepository() { return false; } @@ -149,4 +149,9 @@ public class AnnotationMetaPackage extends AnnotationMeta { public boolean isInjectable() { return false; } + + @Override + public String scope() { + throw new UnsupportedOperationException(); + } } diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/DefaultConstructor.java b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/DefaultConstructor.java new file mode 100644 index 0000000000..83f87183f2 --- /dev/null +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/DefaultConstructor.java @@ -0,0 +1,139 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * License: GNU Lesser General Public License (LGPL), version 2.1 or later. + * See the lgpl.txt file in the root directory or . + */ +package org.hibernate.jpamodelgen.annotation; + +import org.checkerframework.checker.nullness.qual.Nullable; +import org.hibernate.jpamodelgen.model.MetaAttribute; +import org.hibernate.jpamodelgen.model.Metamodel; +import org.hibernate.jpamodelgen.util.Constants; + +import static org.hibernate.jpamodelgen.util.Constants.ENTITY_MANAGER_FACTORY; +import static org.hibernate.jpamodelgen.util.Constants.HIB_SESSION_FACTORY; + +/** + * Used by the container to instantiate a Jakarta Data repository. + * + * @author Gavin King + */ +public class DefaultConstructor implements MetaAttribute { + private final Metamodel annotationMetaEntity; + private final String constructorName; + private final String methodName; + private final String sessionTypeName; + private final String sessionVariableName; + private final @Nullable String dataStore; + private final boolean addInjectAnnotation; + + public DefaultConstructor( + Metamodel annotationMetaEntity, + String constructorName, + String methodName, + String sessionTypeName, + String sessionVariableName, + @Nullable String dataStore, + boolean addInjectAnnotation) { + this.annotationMetaEntity = annotationMetaEntity; + this.constructorName = constructorName; + this.methodName = methodName; + this.sessionTypeName = sessionTypeName; + this.sessionVariableName = sessionVariableName; + this.dataStore = dataStore; + this.addInjectAnnotation = addInjectAnnotation; + } + + @Override + public boolean hasTypedAttribute() { + return true; + } + + @Override + public boolean hasStringAttribute() { + return false; + } + + @Override + public String getAttributeDeclarationString() { + StringBuilder declaration = new StringBuilder(); + declaration.append('\n'); + inject( declaration ); + declaration + .append("@") + .append(annotationMetaEntity.importType("jakarta.persistence.PersistenceUnit")); + if ( dataStore != null ) { + declaration + .append("(unitName=\"") + .append(dataStore) + .append("\")"); + } + declaration + .append("\nprivate ") + .append(annotationMetaEntity.importType(ENTITY_MANAGER_FACTORY)) + .append(" ") + .append(sessionVariableName) + .append("Factory;\n\n"); + inject( declaration ); + declaration + .append("public ") + .append(constructorName) + .append("(") + .append(") {") + .append("\n}\n\n"); + declaration.append('@') + .append(annotationMetaEntity.importType("jakarta.annotation.PostConstruct")) + .append("\nprivate void openSession() {") + .append("\n\t") + .append(sessionVariableName) + .append(" = ") + .append(sessionVariableName) + .append("Factory.unwrap(") + .append(annotationMetaEntity.importType(HIB_SESSION_FACTORY)) + .append(".class).openStatelessSession();") + .append("\n}\n\n"); + declaration.append('@') + .append(annotationMetaEntity.importType("jakarta.annotation.PreDestroy")) + .append("\nprivate void closeSession() {") + .append("\n\t") + .append(sessionVariableName) + .append(".close();") + .append("\n}"); + return declaration.toString(); + } + + private void inject(StringBuilder declaration) { + if ( addInjectAnnotation ) { + declaration + .append('@') + .append(annotationMetaEntity.importType("jakarta.inject.Inject")) + .append('\n'); + } + } + + @Override + public String getAttributeNameDeclarationString() { + throw new UnsupportedOperationException(); + } + + @Override + public String getMetaType() { + throw new UnsupportedOperationException(); + } + + @Override + public String getPropertyName() { + return methodName; + } + + @Override + public String getTypeDeclaration() { + return Constants.ENTITY_MANAGER; + } + + @Override + public Metamodel getHostingEntity() { + return annotationMetaEntity; + } +} diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/NamedQueryMethod.java b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/NamedQueryMethod.java index 851f562714..e8b48a4389 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/NamedQueryMethod.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/NamedQueryMethod.java @@ -31,7 +31,7 @@ class NamedQueryMethod implements MetaAttribute { private final AnnotationMeta annotationMeta; private final SqmSelectStatement select; private final String name; - private final boolean belongsToDao; + private final boolean belongsToRepository; private final boolean reactive; private final String sessionVariableName; private final boolean addNonnullAnnotation; @@ -40,14 +40,14 @@ class NamedQueryMethod implements MetaAttribute { AnnotationMeta annotationMeta, SqmSelectStatement select, String name, - boolean belongsToDao, + boolean belongsToRepository, @Nullable String sessionType, String sessionVariableName, boolean addNonnullAnnotation) { this.annotationMeta = annotationMeta; this.select = select; this.name = name; - this.belongsToDao = belongsToDao; + this.belongsToRepository = belongsToRepository; this.reactive = Constants.MUTINY_SESSION.equals(sessionType); this.sessionVariableName = sessionVariableName; this.addNonnullAnnotation = addNonnullAnnotation; @@ -136,7 +136,7 @@ class NamedQueryMethod implements MetaAttribute { private void modifiers(StringBuilder declaration) { declaration - .append(belongsToDao ? "public " : "public static "); + .append(belongsToRepository ? "public " : "public static "); } private void returnType(StringBuilder declaration) { @@ -160,7 +160,7 @@ class NamedQueryMethod implements MetaAttribute { private void parameters(TreeSet> sortedParameters, StringBuilder declaration) { declaration .append('('); - if ( !belongsToDao ) { + if ( !belongsToRepository) { notNull( declaration ); declaration .append(annotationMeta.importType(Constants.ENTITY_MANAGER)) @@ -169,7 +169,7 @@ class NamedQueryMethod implements MetaAttribute { } int i = 0; for ( SqmParameter param : sortedParameters) { - if ( 0 < i++ || !belongsToDao ) { + if ( 0 < i++ || !belongsToRepository) { declaration .append(", "); } diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/DaoConstructor.java b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/RepositoryConstructor.java similarity index 77% rename from tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/DaoConstructor.java rename to tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/RepositoryConstructor.java index 4ec65b0641..331b8c7303 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/DaoConstructor.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/RepositoryConstructor.java @@ -12,9 +12,11 @@ import org.hibernate.jpamodelgen.model.Metamodel; import org.hibernate.jpamodelgen.util.Constants; /** + * A general purpose constructor which accepts the session. + * * @author Gavin King */ -public class DaoConstructor implements MetaAttribute { +public class RepositoryConstructor implements MetaAttribute { private final Metamodel annotationMetaEntity; private final String constructorName; private final String methodName; @@ -24,8 +26,9 @@ public class DaoConstructor implements MetaAttribute { private final boolean addInjectAnnotation; private final boolean addNonnullAnnotation; private final boolean addOverrideAnnotation; + private final boolean dataRepository; - public DaoConstructor( + public RepositoryConstructor( Metamodel annotationMetaEntity, String constructorName, String methodName, @@ -34,7 +37,8 @@ public class DaoConstructor implements MetaAttribute { @Nullable String dataStore, boolean addInjectAnnotation, boolean addNonnullAnnotation, - boolean addOverrideAnnotation) { + boolean addOverrideAnnotation, + boolean dataRepository) { this.annotationMetaEntity = annotationMetaEntity; this.constructorName = constructorName; this.methodName = methodName; @@ -44,6 +48,7 @@ public class DaoConstructor implements MetaAttribute { this.addInjectAnnotation = addInjectAnnotation; this.addNonnullAnnotation = addNonnullAnnotation; this.addOverrideAnnotation = addOverrideAnnotation; + this.dataRepository = dataRepository; } @Override @@ -60,21 +65,28 @@ public class DaoConstructor implements MetaAttribute { public String getAttributeDeclarationString() { StringBuilder declaration = new StringBuilder(); declaration - .append("\nprivate final "); + .append("\nprivate "); + if ( !dataRepository ) { + // don't mark the field final + // because it will be initialized + // in @PostConstruct + declaration + .append("final "); + } notNull( declaration ); declaration .append(annotationMetaEntity.importType(sessionTypeName)) .append(" ") .append(sessionVariableName) .append(";") - .append("\n"); + .append("\n\n"); inject( declaration ); declaration - .append("\npublic ") + .append("public ") .append(constructorName) .append("("); notNull( declaration ); - named( declaration ); +// named( declaration ); declaration .append(annotationMetaEntity.importType(sessionTypeName)) .append(" ") @@ -105,22 +117,26 @@ public class DaoConstructor implements MetaAttribute { return declaration.toString(); } - private void named(StringBuilder declaration) { - if ( addInjectAnnotation && dataStore != null ) { - declaration - .append("@") - .append(annotationMetaEntity.importType("jakarta.inject.Named")) - .append("(\"") - .append(dataStore) - .append("\") "); - } - } +// private void named(StringBuilder declaration) { +// if ( addInjectAnnotation && !dataRepository && dataStore != null ) { +// declaration +// .append('@') +// .append(annotationMetaEntity.importType("jakarta.inject.Named")) +// .append("(\"") +// .append(dataStore) +// .append("\") "); +// } +// } private void inject(StringBuilder declaration) { - if ( addInjectAnnotation ) { + // Jakarta Data repositories are instantiated + // via the default constructor, so in that + // case, this one is just for testing + if ( addInjectAnnotation && !dataRepository ) { declaration - .append("\n@") - .append(annotationMetaEntity.importType("jakarta.inject.Inject")); + .append('@') + .append(annotationMetaEntity.importType("jakarta.inject.Inject")) + .append('\n'); } } diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/model/Metamodel.java b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/model/Metamodel.java index 605463e7fb..f4489b58f2 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/model/Metamodel.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/model/Metamodel.java @@ -38,4 +38,6 @@ public interface Metamodel extends ImportContext { boolean isImplementation(); boolean isInjectable(); + + String scope(); } diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/util/Constants.java b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/util/Constants.java index a80e56ba39..7ee34b2967 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/util/Constants.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/util/Constants.java @@ -75,11 +75,13 @@ public final class Constants { public static final String CHECK_HQL = "org.hibernate.annotations.processing.CheckHQL"; public static final String ENTITY_MANAGER = "jakarta.persistence.EntityManager"; + public static final String ENTITY_MANAGER_FACTORY = "jakarta.persistence.EntityManagerFactory"; public static final String QUERY = "jakarta.persistence.Query"; public static final String TYPED_QUERY = "jakarta.persistence.TypedQuery"; public static final String HIB_QUERY = "org.hibernate.query.Query"; public static final String HIB_SELECTION_QUERY = "org.hibernate.query.SelectionQuery"; public static final String HIB_SESSION = "org.hibernate.Session"; + public static final String HIB_SESSION_FACTORY = "org.hibernate.SessionFactory"; public static final String HIB_STATELESS_SESSION = "org.hibernate.StatelessSession"; public static final String MUTINY_SESSION = "org.hibernate.reactive.mutiny.Mutiny.Session"; diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java index 53bb2df246..530c939502 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java @@ -627,4 +627,9 @@ public class XmlMetaEntity implements Metamodel { public boolean isInjectable() { return false; } + + @Override + public String scope() { + throw new UnsupportedOperationException(); + } }