Skip to content

Commit 5228789

Browse files
committed
HHH-18649 better way to populate TypedQueryReference
1 parent fa54ec4 commit 5228789

File tree

14 files changed

+155
-89
lines changed

14 files changed

+155
-89
lines changed

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.hibernate.boot.spi.AbstractNamedQueryDefinition;
1313
import org.hibernate.boot.query.NamedHqlQueryDefinition;
1414
import org.hibernate.engine.spi.SessionFactoryImplementor;
15+
import org.hibernate.models.spi.AnnotationTarget;
1516
import org.hibernate.query.hql.internal.NamedHqlQueryMementoImpl;
1617
import org.hibernate.query.sqm.spi.NamedSqmQueryMemento;
1718

@@ -42,7 +43,8 @@ public NamedHqlQueryDefinitionImpl(
4243
Integer fetchSize,
4344
String comment,
4445
Map<String,String> parameterTypes,
45-
Map<String,Object> hints) {
46+
Map<String,Object> hints,
47+
AnnotationTarget location) {
4648
super(
4749
name,
4850
resultType,
@@ -55,7 +57,8 @@ public NamedHqlQueryDefinitionImpl(
5557
timeout,
5658
fetchSize,
5759
comment,
58-
hints
60+
hints,
61+
location
5962
);
6063
this.hqlString = hqlString;
6164
this.firstResult = firstResult;

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.hibernate.boot.spi.AbstractNamedQueryDefinition;
1313
import org.hibernate.boot.query.NamedNativeQueryDefinition;
1414
import org.hibernate.engine.spi.SessionFactoryImplementor;
15+
import org.hibernate.models.spi.AnnotationTarget;
1516
import org.hibernate.query.sql.internal.NamedNativeQueryMementoImpl;
1617
import org.hibernate.query.sql.spi.NamedNativeQueryMemento;
1718

@@ -44,7 +45,8 @@ public NamedNativeQueryDefinitionImpl(
4445
String comment,
4546
Integer firstResult,
4647
Integer maxResults,
47-
Map<String,Object> hints) {
48+
Map<String,Object> hints,
49+
AnnotationTarget location) {
4850
super(
4951
name,
5052
resultType,
@@ -57,8 +59,8 @@ public NamedNativeQueryDefinitionImpl(
5759
timeout,
5860
fetchSize,
5961
comment,
60-
hints
61-
);
62+
hints,
63+
location);
6264
this.sqlString = sqlString;
6365
this.resultSetMappingName = resultSetMappingName;
6466
this.querySpaces = querySpaces;

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
@@ -18,6 +18,7 @@
1818
import org.hibernate.engine.spi.SessionFactoryImplementor;
1919
import org.hibernate.internal.util.StringHelper;
2020
import org.hibernate.internal.util.collections.CollectionHelper;
21+
import org.hibernate.models.spi.AnnotationTarget;
2122
import org.hibernate.procedure.internal.NamedCallableQueryMementoImpl;
2223
import org.hibernate.procedure.internal.Util;
2324
import org.hibernate.procedure.spi.NamedCallableQueryMemento;
@@ -74,6 +75,12 @@ public String getRegistrationName() {
7475
return registeredName;
7576
}
7677

78+
@Override
79+
public AnnotationTarget 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, null )
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, null )
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: 21 additions & 19 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, null )
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, null )
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 );

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: 5 additions & 3 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,8 @@ class Builder<E> extends AbstractNamedQueryBuilder<E, Builder<E>> {
3536

3637
private Map<String,String> parameterTypes;
3738

38-
public Builder(String name) {
39-
super( name );
39+
public Builder(String name, AnnotationTarget location) {
40+
super( name, location );
4041
}
4142

4243
@Override
@@ -80,7 +81,8 @@ public NamedHqlQueryDefinitionImpl<E> build() {
8081
getFetchSize(),
8182
getComment(),
8283
parameterTypes,
83-
getHints()
84+
getHints(),
85+
getLocation()
8486
);
8587
}
8688

0 commit comments

Comments
 (0)