diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMeta.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMeta.java index 233e9f25df18..382c900f00fe 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMeta.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMeta.java @@ -156,7 +156,7 @@ private void addAuxiliaryMembersForRepeatableAnnotation(String annotationName, S final List annotationValues = (List) value.getValue(); for ( AnnotationValue annotationValue : annotationValues ) { - addAuxiliaryMembersForMirror( (AnnotationMirror) annotationValue.getValue(), prefix ); + addAuxiliaryMembersForMirror( (AnnotationMirror) annotationValue.getValue(), prefix, annotationName ); } } } @@ -165,21 +165,32 @@ private void addAuxiliaryMembersForRepeatableAnnotation(String annotationName, S private void addAuxiliaryMembersForAnnotation(String annotationName, String prefix) { final AnnotationMirror mirror = getAnnotationMirror( getElement(), annotationName ); if ( mirror != null ) { - addAuxiliaryMembersForMirror( mirror, prefix ); + addAuxiliaryMembersForMirror( mirror, prefix, annotationName ); } } - private void addAuxiliaryMembersForMirror(AnnotationMirror mirror, String prefix) { + private void addAuxiliaryMembersForMirror(AnnotationMirror mirror, String prefix, String annotationName) { if ( !isJakartaDataStyle() ) { - mirror.getElementValues().forEach((key, value) -> { - if ( key.getSimpleName().contentEquals("name") ) { - final String name = value.getValue().toString(); - if ( !name.isEmpty() ) { - putMember( prefix + name, auxiliaryMember( mirror, prefix, name ) ); - } - } - }); + final String name = defaultImplicitName( annotationName, explicitName( mirror ) ); + putMember( prefix + name, auxiliaryMember( mirror, prefix, name ) ); + } + } + + private static String explicitName(AnnotationMirror mirror) { + for ( var entry : mirror.getElementValues().entrySet() ) { + if ( entry.getKey().getSimpleName().contentEquals( "name" ) ) { + return entry.getValue().getValue().toString(); + } } + return ""; + } + + private String defaultImplicitName(String annotationName, String explicitName) { + return explicitName.isEmpty() + && ( Constants.NAMED_ENTITY_GRAPH.equals( annotationName ) + || Constants.NAMED_ENTITY_GRAPHS.equals( annotationName ) ) + ? getSimpleName() + : explicitName; } private NameMetaAttribute auxiliaryMember(AnnotationMirror mirror, String prefix, String name) { diff --git a/tooling/metamodel-generator/src/test/java/org/hibernate/processor/test/namedquery/AuxiliaryTest.java b/tooling/metamodel-generator/src/test/java/org/hibernate/processor/test/namedquery/AuxiliaryTest.java index c031fd4baaed..1d9d44dc4830 100644 --- a/tooling/metamodel-generator/src/test/java/org/hibernate/processor/test/namedquery/AuxiliaryTest.java +++ b/tooling/metamodel-generator/src/test/java/org/hibernate/processor/test/namedquery/AuxiliaryTest.java @@ -98,7 +98,22 @@ void test() { assertPresenceOfNameFieldInMetamodelFor( Book.class, "GRAPH_ENTITY_GRAPH", - "Missing fetch profile attribute." + "Missing graph attribute." + ); + assertPresenceOfFieldInMetamodelFor( + Book.class, + "_entityGraph", + "Missing graph attribute." + ); + assertPresenceOfNameFieldInMetamodelFor( + Book.class, + "GRAPH_BOOK", + "Missing defaulted graph attribute." + ); + assertPresenceOfFieldInMetamodelFor( + Book.class, + "_Book", + "Missing defaulted graph attribute." ); assertPresenceOfMethodInMetamodelFor( Book.class, diff --git a/tooling/metamodel-generator/src/test/java/org/hibernate/processor/test/namedquery/Book.java b/tooling/metamodel-generator/src/test/java/org/hibernate/processor/test/namedquery/Book.java index d19d94a01ada..7e8eb70b7f7a 100644 --- a/tooling/metamodel-generator/src/test/java/org/hibernate/processor/test/namedquery/Book.java +++ b/tooling/metamodel-generator/src/test/java/org/hibernate/processor/test/namedquery/Book.java @@ -6,11 +6,13 @@ import jakarta.persistence.Entity; import jakarta.persistence.Id; +import jakarta.persistence.NamedAttributeNode; import jakarta.persistence.NamedEntityGraph; import jakarta.persistence.NamedQuery; @Entity @NamedEntityGraph(name = "entityGraph") +@NamedEntityGraph(attributeNodes = @NamedAttributeNode("text")) @NamedQuery(name="booksByTitle", query = "from Book where title = ?1") @NamedQuery(name="booksByTitleVerbose",