Skip to content

Commit b1aad76

Browse files
committed
HHH-19979 handle @NamedEntityGraph with defaulted name
1 parent ffb7d28 commit b1aad76

File tree

3 files changed

+40
-12
lines changed

3 files changed

+40
-12
lines changed

tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMeta.java

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ private void addAuxiliaryMembersForRepeatableAnnotation(String annotationName, S
156156
final List<? extends AnnotationValue> annotationValues =
157157
(List<? extends AnnotationValue>) value.getValue();
158158
for ( AnnotationValue annotationValue : annotationValues ) {
159-
addAuxiliaryMembersForMirror( (AnnotationMirror) annotationValue.getValue(), prefix );
159+
addAuxiliaryMembersForMirror( (AnnotationMirror) annotationValue.getValue(), prefix, annotationName );
160160
}
161161
}
162162
}
@@ -165,21 +165,32 @@ private void addAuxiliaryMembersForRepeatableAnnotation(String annotationName, S
165165
private void addAuxiliaryMembersForAnnotation(String annotationName, String prefix) {
166166
final AnnotationMirror mirror = getAnnotationMirror( getElement(), annotationName );
167167
if ( mirror != null ) {
168-
addAuxiliaryMembersForMirror( mirror, prefix );
168+
addAuxiliaryMembersForMirror( mirror, prefix, annotationName );
169169
}
170170
}
171171

172-
private void addAuxiliaryMembersForMirror(AnnotationMirror mirror, String prefix) {
172+
private void addAuxiliaryMembersForMirror(AnnotationMirror mirror, String prefix, String annotationName) {
173173
if ( !isJakartaDataStyle() ) {
174-
mirror.getElementValues().forEach((key, value) -> {
175-
if ( key.getSimpleName().contentEquals("name") ) {
176-
final String name = value.getValue().toString();
177-
if ( !name.isEmpty() ) {
178-
putMember( prefix + name, auxiliaryMember( mirror, prefix, name ) );
179-
}
180-
}
181-
});
174+
final String name = defaultImplicitName( annotationName, explicitName( mirror ) );
175+
putMember( prefix + name, auxiliaryMember( mirror, prefix, name ) );
176+
}
177+
}
178+
179+
private static String explicitName(AnnotationMirror mirror) {
180+
for ( var entry : mirror.getElementValues().entrySet() ) {
181+
if ( entry.getKey().getSimpleName().contentEquals( "name" ) ) {
182+
return entry.getValue().getValue().toString();
183+
}
182184
}
185+
return "";
186+
}
187+
188+
private String defaultImplicitName(String annotationName, String explicitName) {
189+
return explicitName.isEmpty()
190+
&& ( Constants.NAMED_ENTITY_GRAPH.equals( annotationName )
191+
|| Constants.NAMED_ENTITY_GRAPHS.equals( annotationName ) )
192+
? getSimpleName()
193+
: explicitName;
183194
}
184195

185196
private NameMetaAttribute auxiliaryMember(AnnotationMirror mirror, String prefix, String name) {

tooling/metamodel-generator/src/test/java/org/hibernate/processor/test/namedquery/AuxiliaryTest.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,22 @@ void test() {
9898
assertPresenceOfNameFieldInMetamodelFor(
9999
Book.class,
100100
"GRAPH_ENTITY_GRAPH",
101-
"Missing fetch profile attribute."
101+
"Missing graph attribute."
102+
);
103+
assertPresenceOfFieldInMetamodelFor(
104+
Book.class,
105+
"_entityGraph",
106+
"Missing graph attribute."
107+
);
108+
assertPresenceOfNameFieldInMetamodelFor(
109+
Book.class,
110+
"GRAPH_BOOK",
111+
"Missing defaulted graph attribute."
112+
);
113+
assertPresenceOfFieldInMetamodelFor(
114+
Book.class,
115+
"_Book",
116+
"Missing defaulted graph attribute."
102117
);
103118
assertPresenceOfMethodInMetamodelFor(
104119
Book.class,

tooling/metamodel-generator/src/test/java/org/hibernate/processor/test/namedquery/Book.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66

77
import jakarta.persistence.Entity;
88
import jakarta.persistence.Id;
9+
import jakarta.persistence.NamedAttributeNode;
910
import jakarta.persistence.NamedEntityGraph;
1011
import jakarta.persistence.NamedQuery;
1112

1213
@Entity
1314
@NamedEntityGraph(name = "entityGraph")
15+
@NamedEntityGraph(attributeNodes = @NamedAttributeNode("text"))
1416
@NamedQuery(name="booksByTitle",
1517
query = "from Book where title = ?1")
1618
@NamedQuery(name="booksByTitleVerbose",

0 commit comments

Comments
 (0)