Skip to content

Commit f62735a

Browse files
committed
HHH-19979 handle @NamedEntityGraph with defaulted name
1 parent 7f34241 commit f62735a

File tree

3 files changed

+43
-13
lines changed

3 files changed

+43
-13
lines changed

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

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import static org.hibernate.processor.util.Constants.ENTITY_GRAPH;
2626
import static org.hibernate.processor.util.Constants.HIB_ENABLED_FETCH_PROFILE;
2727
import static org.hibernate.processor.util.Constants.JAVA_OBJECT;
28+
import static org.hibernate.processor.util.Constants.NAMED_ENTITY_GRAPH;
29+
import static org.hibernate.processor.util.Constants.NAMED_ENTITY_GRAPHS;
2830
import static org.hibernate.processor.util.Constants.NAMED_QUERY;
2931
import static org.hibernate.processor.util.Constants.TYPED_QUERY_REFERENCE;
3032
import static org.hibernate.processor.util.TypeUtils.containsAnnotation;
@@ -42,7 +44,7 @@ void addAuxiliaryMembers() {
4244
addAuxiliaryMembersForAnnotation( Constants.SQL_RESULT_SET_MAPPING, "MAPPING_" );
4345
addAuxiliaryMembersForRepeatableAnnotation( Constants.SQL_RESULT_SET_MAPPINGS, "MAPPING_" );
4446
addAuxiliaryMembersForAnnotation( Constants.NAMED_ENTITY_GRAPH, "GRAPH_" );
45-
addAuxiliaryMembersForRepeatableAnnotation( Constants.NAMED_ENTITY_GRAPHS, "GRAPH_" );
47+
addAuxiliaryMembersForRepeatableAnnotation( NAMED_ENTITY_GRAPHS, "GRAPH_" );
4648

4749
addAuxiliaryMembersForAnnotation( Constants.HIB_NAMED_QUERY, "QUERY_" );
4850
addAuxiliaryMembersForRepeatableAnnotation( Constants.HIB_NAMED_QUERIES, "QUERY_" );
@@ -156,7 +158,7 @@ private void addAuxiliaryMembersForRepeatableAnnotation(String annotationName, S
156158
final List<? extends AnnotationValue> annotationValues =
157159
(List<? extends AnnotationValue>) value.getValue();
158160
for ( AnnotationValue annotationValue : annotationValues ) {
159-
addAuxiliaryMembersForMirror( (AnnotationMirror) annotationValue.getValue(), prefix );
161+
addAuxiliaryMembersForMirror( (AnnotationMirror) annotationValue.getValue(), prefix, annotationName );
160162
}
161163
}
162164
}
@@ -165,21 +167,32 @@ private void addAuxiliaryMembersForRepeatableAnnotation(String annotationName, S
165167
private void addAuxiliaryMembersForAnnotation(String annotationName, String prefix) {
166168
final AnnotationMirror mirror = getAnnotationMirror( getElement(), annotationName );
167169
if ( mirror != null ) {
168-
addAuxiliaryMembersForMirror( mirror, prefix );
170+
addAuxiliaryMembersForMirror( mirror, prefix, annotationName );
169171
}
170172
}
171173

172-
private void addAuxiliaryMembersForMirror(AnnotationMirror mirror, String prefix) {
174+
private void addAuxiliaryMembersForMirror(AnnotationMirror mirror, String prefix, String annotationName) {
173175
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-
});
176+
final String name = defaultImplicitName( annotationName, explicitName( mirror ) );
177+
putMember( prefix + name, auxiliaryMember( mirror, prefix, name ) );
178+
}
179+
}
180+
181+
private static String explicitName(AnnotationMirror mirror) {
182+
for ( var entry : mirror.getElementValues().entrySet() ) {
183+
if ( entry.getKey().getSimpleName().contentEquals( "name" ) ) {
184+
return entry.getValue().getValue().toString();
185+
}
182186
}
187+
return "";
188+
}
189+
190+
private String defaultImplicitName(String annotationName, String explicitName) {
191+
return explicitName.isEmpty()
192+
&& ( NAMED_ENTITY_GRAPH.equals( annotationName )
193+
|| NAMED_ENTITY_GRAPHS.equals( annotationName ) )
194+
? getSimpleName()
195+
: explicitName;
183196
}
184197

185198
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)