Skip to content

Commit 600288d

Browse files
committed
HHH-18649 populate EntityGraph in static metamodel
1 parent c863838 commit 600288d

File tree

15 files changed

+458
-336
lines changed

15 files changed

+458
-336
lines changed

hibernate-core/src/main/java/org/hibernate/boot/internal/NamedHqlQueryDefinitionImpl.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ public NamedHqlQueryDefinitionImpl(
4242
Integer fetchSize,
4343
String comment,
4444
Map<String,String> parameterTypes,
45-
Map<String,Object> hints) {
45+
Map<String,Object> hints,
46+
String location) {
4647
super(
4748
name,
4849
resultType,
@@ -55,7 +56,8 @@ public NamedHqlQueryDefinitionImpl(
5556
timeout,
5657
fetchSize,
5758
comment,
58-
hints
59+
hints,
60+
location
5961
);
6062
this.hqlString = hqlString;
6163
this.firstResult = firstResult;

hibernate-core/src/main/java/org/hibernate/boot/internal/NamedNativeQueryDefinitionImpl.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ public NamedNativeQueryDefinitionImpl(
4444
String comment,
4545
Integer firstResult,
4646
Integer maxResults,
47-
Map<String,Object> hints) {
47+
Map<String,Object> hints,
48+
String location) {
4849
super(
4950
name,
5051
resultType,
@@ -57,7 +58,8 @@ public NamedNativeQueryDefinitionImpl(
5758
timeout,
5859
fetchSize,
5960
comment,
60-
hints
61+
hints,
62+
location
6163
);
6264
this.sqlString = sqlString;
6365
this.resultSetMappingName = resultSetMappingName;

hibernate-core/src/main/java/org/hibernate/boot/internal/NamedProcedureCallDefinitionImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.Map;
1111
import java.util.Set;
1212

13+
import org.checkerframework.checker.nullness.qual.Nullable;
1314
import org.hibernate.CacheMode;
1415
import org.hibernate.FlushMode;
1516
import org.hibernate.MappingException;
@@ -74,6 +75,12 @@ public String getRegistrationName() {
7475
return registeredName;
7576
}
7677

78+
@Override
79+
public @Nullable String getLocation() {
80+
// not kept for now
81+
return null;
82+
}
83+
7784
@Override
7885
public String getProcedureName() {
7986
return procedureName;

hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotationBinder.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,11 @@ public static void bindDefaults(MetadataBuildingContext context) {
104104
// queries ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
105105

106106
globalRegistrations.getNamedQueryRegistrations().forEach( (name, queryRegistration) -> {
107-
QueryBinder.bindQuery( queryRegistration.configuration(), context, true );
107+
QueryBinder.bindQuery( queryRegistration.configuration(), context, true, null );
108108
} );
109109

110110
globalRegistrations.getNamedNativeQueryRegistrations().forEach( (name, queryRegistration) -> {
111-
QueryBinder.bindNativeQuery( queryRegistration.configuration(), context, true );
111+
QueryBinder.bindNativeQuery( queryRegistration.configuration(), context, null, true );
112112
} );
113113

114114
globalRegistrations.getNamedStoredProcedureQueryRegistrations().forEach( (name, queryRegistration) -> {
@@ -152,13 +152,13 @@ private static void bindNamedHibernateQueries(AnnotationTarget annotationTarget,
152152
annotationTarget.forEachRepeatedAnnotationUsages(
153153
HibernateAnnotations.NAMED_QUERY,
154154
sourceModelContext,
155-
(usage) -> QueryBinder.bindQuery( usage, context )
155+
(usage) -> QueryBinder.bindQuery( usage, context, annotationTarget )
156156
);
157157

158158
annotationTarget.forEachRepeatedAnnotationUsages(
159159
HibernateAnnotations.NAMED_NATIVE_QUERY,
160160
sourceModelContext,
161-
(usage) -> QueryBinder.bindNativeQuery( usage, context )
161+
(usage) -> QueryBinder.bindNativeQuery( usage, context, annotationTarget )
162162
);
163163
}
164164

@@ -174,13 +174,13 @@ private static void bindNamedJpaQueries(AnnotationTarget annotationTarget, Metad
174174
annotationTarget.forEachRepeatedAnnotationUsages(
175175
JpaAnnotations.NAMED_QUERY,
176176
sourceModelContext,
177-
(usage) -> QueryBinder.bindQuery( usage, context, false )
177+
(usage) -> QueryBinder.bindQuery( usage, context, false, annotationTarget )
178178
);
179179

180180
annotationTarget.forEachRepeatedAnnotationUsages(
181181
JpaAnnotations.NAMED_NATIVE_QUERY,
182182
sourceModelContext,
183-
(usage) -> QueryBinder.bindNativeQuery( usage, context, false )
183+
(usage) -> QueryBinder.bindNativeQuery( usage, context, annotationTarget, false )
184184
);
185185

186186
annotationTarget.forEachRepeatedAnnotationUsages(

hibernate-core/src/main/java/org/hibernate/boot/model/internal/QueryBinder.java

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.hibernate.AnnotationException;
1515
import org.hibernate.CacheMode;
1616
import org.hibernate.FlushMode;
17+
import org.hibernate.models.spi.AnnotationTarget;
1718
import org.hibernate.query.QueryFlushMode;
1819
import org.hibernate.LockOptions;
1920
import org.hibernate.annotations.FlushModeType;
@@ -74,7 +75,8 @@ public abstract class QueryBinder {
7475
public static void bindQuery(
7576
NamedQuery namedQuery,
7677
MetadataBuildingContext context,
77-
boolean isDefault) {
78+
boolean isDefault,
79+
AnnotationTarget annotationTarget) {
7880
if ( namedQuery == null ) {
7981
return;
8082
}
@@ -94,7 +96,7 @@ public static void bindQuery(
9496
final QueryHintDefinition hints = new QueryHintDefinition( queryName, namedQuery.hints() );
9597
final NamedHqlQueryDefinition<?> queryMapping =
9698
createNamedQueryDefinition( queryName, queryString, resultClass,
97-
hints.determineLockOptions( namedQuery ), hints );
99+
hints.determineLockOptions( namedQuery ), hints, annotationTarget );
98100
if ( isDefault ) {
99101
context.getMetadataCollector().addDefaultQuery( queryMapping );
100102
}
@@ -105,8 +107,8 @@ public static void bindQuery(
105107

106108
private static <T> NamedHqlQueryDefinitionImpl<T> createNamedQueryDefinition(
107109
String queryName, String queryString, Class<T> resultClass, LockOptions lockOptions,
108-
QueryHintDefinition hints) {
109-
return new NamedHqlQueryDefinitionImpl.Builder<T>(queryName)
110+
QueryHintDefinition hints, AnnotationTarget annotationTarget) {
111+
return new NamedHqlQueryDefinitionImpl.Builder<T>(queryName, annotationTarget)
110112
.setHqlString(queryString)
111113
.setResultClass(resultClass)
112114
.setCacheable(hints.getCacheability())
@@ -124,6 +126,7 @@ private static <T> NamedHqlQueryDefinitionImpl<T> createNamedQueryDefinition(
124126
public static void bindNativeQuery(
125127
NamedNativeQuery namedNativeQuery,
126128
MetadataBuildingContext context,
129+
AnnotationTarget location,
127130
boolean isDefault) {
128131
if ( namedNativeQuery == null ) {
129132
return;
@@ -143,7 +146,7 @@ public static void bindNativeQuery(
143146
final Class<?> resultClass = void.class == resultClassDetails ? null : resultClassDetails;
144147

145148
final NamedNativeQueryDefinition<?> queryDefinition =
146-
createNamedQueryDefinition( registrationName, queryString, resultClass, resultSetMappingName, hints );
149+
createNamedQueryDefinition( registrationName, queryString, resultClass, resultSetMappingName, hints, location );
147150

148151
if ( LOG.isDebugEnabled() ) {
149152
LOG.debugf( "Binding named native query: %s => %s",
@@ -161,8 +164,9 @@ public static void bindNativeQuery(
161164
private static <T> NamedNativeQueryDefinition<T> createNamedQueryDefinition(
162165
String registrationName, String queryString,
163166
Class<T> resultClass, String resultSetMappingName,
164-
QueryHintDefinition hints) {
165-
return new NamedNativeQueryDefinition.Builder<T>(registrationName)
167+
QueryHintDefinition hints,
168+
AnnotationTarget location) {
169+
return new NamedNativeQueryDefinition.Builder<T>(registrationName, location)
166170
.setSqlString(queryString)
167171
.setResultClass(resultClass)
168172
.setResultSetMappingName(resultSetMappingName)
@@ -184,10 +188,11 @@ public static void bindNativeQuery(
184188
SQLSelect sqlSelect,
185189
ClassDetails annotatedClass,
186190
MetadataBuildingContext context) {
187-
final NamedNativeQueryDefinition.Builder<?> builder = new NamedNativeQueryDefinition.Builder<>( name )
188-
.setFlushMode( FlushMode.MANUAL )
189-
.setSqlString( sqlSelect.sql() )
190-
.setQuerySpaces( setOf( sqlSelect.querySpaces() ) );
191+
final NamedNativeQueryDefinition.Builder<?> builder =
192+
new NamedNativeQueryDefinition.Builder<>( name )
193+
.setFlushMode( FlushMode.MANUAL )
194+
.setSqlString( sqlSelect.sql() )
195+
.setQuerySpaces( setOf( sqlSelect.querySpaces() ) );
191196

192197
if ( annotatedClass != null ) {
193198
builder.setResultClass(
@@ -210,7 +215,8 @@ public static void bindNativeQuery(
210215

211216
public static void bindNativeQuery(
212217
org.hibernate.annotations.NamedNativeQuery namedNativeQuery,
213-
MetadataBuildingContext context) {
218+
MetadataBuildingContext context,
219+
AnnotationTarget location) {
214220
if ( namedNativeQuery == null ) {
215221
return;
216222
}
@@ -231,7 +237,7 @@ public static void bindNativeQuery(
231237

232238
final NamedNativeQueryDefinition.Builder<?> builder =
233239
createQueryDefinition( namedNativeQuery, registrationName, resultSetMappingName, resultClass,
234-
namedNativeQuery.timeout(), namedNativeQuery.fetchSize(), querySpaces );
240+
namedNativeQuery.timeout(), namedNativeQuery.fetchSize(), querySpaces, location );
235241

236242
if ( TRUE == namedNativeQuery.callable() ) {
237243
final NamedProcedureCallDefinition definition =
@@ -261,8 +267,9 @@ private static <T> NamedNativeQueryDefinition.Builder<T> createQueryDefinition(
261267
String registrationName, String resultSetMappingName,
262268
Class<T> resultClass,
263269
int timeout, int fetchSize,
264-
HashSet<String> querySpaces) {
265-
return new NamedNativeQueryDefinition.Builder<T>(registrationName)
270+
HashSet<String> querySpaces,
271+
AnnotationTarget location) {
272+
return new NamedNativeQueryDefinition.Builder<T>(registrationName, location)
266273
.setSqlString(namedNativeQuery.query())
267274
.setResultSetMappingName(resultSetMappingName)
268275
.setResultClass(resultClass)
@@ -365,17 +372,18 @@ public static void bindQuery(
365372
String name,
366373
HQLSelect hqlSelect,
367374
MetadataBuildingContext context) {
368-
final NamedHqlQueryDefinition<?> hqlQueryDefinition = new NamedHqlQueryDefinition.Builder<>( name )
369-
.setFlushMode( FlushMode.MANUAL )
370-
.setHqlString( hqlSelect.query() )
371-
.build();
372-
375+
final NamedHqlQueryDefinition<?> hqlQueryDefinition =
376+
new NamedHqlQueryDefinition.Builder<>( name )
377+
.setFlushMode( FlushMode.MANUAL )
378+
.setHqlString( hqlSelect.query() )
379+
.build();
373380
context.getMetadataCollector().addNamedQuery( hqlQueryDefinition );
374381
}
375382

376383
public static void bindQuery(
377384
org.hibernate.annotations.NamedQuery namedQuery,
378-
MetadataBuildingContext context) {
385+
MetadataBuildingContext context,
386+
AnnotationTarget location) {
379387
if ( namedQuery == null ) {
380388
return;
381389
}
@@ -389,7 +397,7 @@ public static void bindQuery(
389397

390398
final NamedHqlQueryDefinition.Builder<?> builder =
391399
createQueryDefinition( namedQuery, registrationName, resultClass,
392-
namedQuery.timeout(), namedQuery.fetchSize() ) ;
400+
namedQuery.timeout(), namedQuery.fetchSize(), location ) ;
393401

394402
final NamedHqlQueryDefinitionImpl<?> hqlQueryDefinition = builder.build();
395403

@@ -403,8 +411,9 @@ public static void bindQuery(
403411

404412
private static <T> NamedHqlQueryDefinition.Builder<T> createQueryDefinition(
405413
org.hibernate.annotations.NamedQuery namedQuery,
406-
String registrationName, Class<T> resultClass, int timeout, int fetchSize) {
407-
return new NamedHqlQueryDefinition.Builder<T>(registrationName)
414+
String registrationName, Class<T> resultClass, int timeout, int fetchSize,
415+
AnnotationTarget location) {
416+
return new NamedHqlQueryDefinition.Builder<T>(registrationName, location)
408417
.setHqlString(namedQuery.query())
409418
.setResultClass(resultClass)
410419
.setCacheable(namedQuery.cacheable())

hibernate-core/src/main/java/org/hibernate/boot/model/source/internal/hbm/NamedQueryBinder.java

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,16 @@ public static void processNamedQuery(
4747
String prefix) {
4848
final String registrationName = prefix + namedQueryBinding.getName();
4949

50-
final NamedHqlQueryDefinition.Builder<?> queryBuilder = new NamedHqlQueryDefinition.Builder<>( registrationName )
51-
.setComment( namedQueryBinding.getComment() )
52-
.setCacheable( namedQueryBinding.isCacheable() )
53-
.setCacheMode( namedQueryBinding.getCacheMode() )
54-
.setCacheRegion( namedQueryBinding.getCacheRegion() )
55-
.setTimeout( namedQueryBinding.getTimeout() )
56-
.setReadOnly( namedQueryBinding.isReadOnly() )
57-
.setFlushMode( namedQueryBinding.getFlushMode() )
58-
.setFetchSize( namedQueryBinding.getFetchSize() );
50+
final NamedHqlQueryDefinition.Builder<?> queryBuilder =
51+
new NamedHqlQueryDefinition.Builder<>( registrationName )
52+
.setComment( namedQueryBinding.getComment() )
53+
.setCacheable( namedQueryBinding.isCacheable() )
54+
.setCacheMode( namedQueryBinding.getCacheMode() )
55+
.setCacheRegion( namedQueryBinding.getCacheRegion() )
56+
.setTimeout( namedQueryBinding.getTimeout() )
57+
.setReadOnly( namedQueryBinding.isReadOnly() )
58+
.setFlushMode( namedQueryBinding.getFlushMode() )
59+
.setFetchSize( namedQueryBinding.getFetchSize() );
5960

6061
boolean foundQuery = false;
6162

@@ -109,16 +110,17 @@ public static void processNamedNativeQuery(
109110

110111
final String registrationName = prefix + namedQueryBinding.getName();
111112

112-
final NamedNativeQueryDefinition.Builder<?> builder = new NamedNativeQueryDefinition.Builder<>( registrationName )
113-
.setComment( namedQueryBinding.getComment() )
114-
.setCacheable( namedQueryBinding.isCacheable() )
115-
.setCacheMode( namedQueryBinding.getCacheMode() )
116-
.setCacheRegion( namedQueryBinding.getCacheRegion() )
117-
.setTimeout( namedQueryBinding.getTimeout() )
118-
.setReadOnly( namedQueryBinding.isReadOnly() )
119-
.setFlushMode( namedQueryBinding.getFlushMode() )
120-
.setFetchSize( namedQueryBinding.getFetchSize() )
121-
.setResultSetMappingName( namedQueryBinding.getResultsetRef() );
113+
final NamedNativeQueryDefinition.Builder<?> builder =
114+
new NamedNativeQueryDefinition.Builder<>( registrationName )
115+
.setComment( namedQueryBinding.getComment() )
116+
.setCacheable( namedQueryBinding.isCacheable() )
117+
.setCacheMode( namedQueryBinding.getCacheMode() )
118+
.setCacheRegion( namedQueryBinding.getCacheRegion() )
119+
.setTimeout( namedQueryBinding.getTimeout() )
120+
.setReadOnly( namedQueryBinding.isReadOnly() )
121+
.setFlushMode( namedQueryBinding.getFlushMode() )
122+
.setFetchSize( namedQueryBinding.getFetchSize() )
123+
.setResultSetMappingName( namedQueryBinding.getResultsetRef() );
122124

123125
final ImplicitHbmResultSetMappingDescriptorBuilder implicitResultSetMappingBuilder =
124126
new ImplicitHbmResultSetMappingDescriptorBuilder( registrationName, context );
@@ -222,12 +224,10 @@ else if ( content instanceof JAXBElement ) {
222224
);
223225
}
224226

225-
if ( content instanceof JaxbHbmQueryParamType ) {
226-
final JaxbHbmQueryParamType paramTypeBinding = (JaxbHbmQueryParamType) content;
227+
if ( content instanceof JaxbHbmQueryParamType paramTypeBinding ) {
227228
queryBuilder.addParameterTypeHint( paramTypeBinding.getName(), paramTypeBinding.getType() );
228229
}
229-
else if ( content instanceof JaxbHbmSynchronizeType ) {
230-
final JaxbHbmSynchronizeType synchronizedSpace = (JaxbHbmSynchronizeType) content;
230+
else if ( content instanceof JaxbHbmSynchronizeType synchronizedSpace ) {
231231
queryBuilder.addSynchronizedQuerySpace( synchronizedSpace.getTable() );
232232
}
233233
else if ( content instanceof JaxbHbmNativeQueryScalarReturnType ) {

hibernate-core/src/main/java/org/hibernate/boot/query/AbstractNamedQueryBuilder.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.hibernate.LockOptions;
1313

1414
import org.checkerframework.checker.nullness.qual.Nullable;
15+
import org.hibernate.models.spi.AnnotationTarget;
1516

1617
/**
1718
* @author Steve Ebersole
@@ -36,14 +37,21 @@ public abstract class AbstractNamedQueryBuilder<R, T extends AbstractNamedQueryB
3637

3738
private Map<String, Object> hints;
3839

39-
public AbstractNamedQueryBuilder(String name) {
40+
private final AnnotationTarget location;
41+
42+
public AbstractNamedQueryBuilder(String name, AnnotationTarget location) {
4043
this.name = name;
44+
this.location = location;
4145
}
4246

4347
public String getName() {
4448
return name;
4549
}
4650

51+
AnnotationTarget getLocation() {
52+
return location;
53+
}
54+
4755
protected abstract T getThis();
4856

4957
public T setResultClass(Class<R> resultClass) {

hibernate-core/src/main/java/org/hibernate/boot/query/NamedHqlQueryDefinition.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import org.hibernate.boot.internal.NamedHqlQueryDefinitionImpl;
1111
import org.hibernate.engine.spi.SessionFactoryImplementor;
12+
import org.hibernate.models.spi.AnnotationTarget;
1213
import org.hibernate.query.sqm.spi.NamedSqmQueryMemento;
1314

1415
/**
@@ -35,8 +36,12 @@ class Builder<E> extends AbstractNamedQueryBuilder<E, Builder<E>> {
3536

3637
private Map<String,String> parameterTypes;
3738

39+
public Builder(String name, AnnotationTarget location) {
40+
super( name, location );
41+
}
42+
3843
public Builder(String name) {
39-
super( name );
44+
super( name, null );
4045
}
4146

4247
@Override
@@ -80,7 +85,9 @@ public NamedHqlQueryDefinitionImpl<E> build() {
8085
getFetchSize(),
8186
getComment(),
8287
parameterTypes,
83-
getHints()
88+
getHints(),
89+
//TODO: should this be location.asClassDetails().getClassName() ?
90+
getLocation() == null ? null : getLocation().getName()
8491
);
8592
}
8693

0 commit comments

Comments
 (0)