@@ -48,11 +48,15 @@ public static void bindQuery(
48
48
NamedQuery queryAnn ,
49
49
MetadataBuildingContext context ,
50
50
boolean isDefault ) {
51
- if ( queryAnn == null ) return ;
51
+ if ( queryAnn == null ) {
52
+ return ;
53
+ }
54
+
52
55
if ( BinderHelper .isEmptyAnnotationValue ( queryAnn .name () ) ) {
53
56
throw new AnnotationException ( "A named query must have a name when used in class or package level" );
54
57
}
55
- //EJBQL Query
58
+
59
+ // JPA-QL Query
56
60
QueryHintDefinition hints = new QueryHintDefinition ( queryAnn .hints () );
57
61
String queryName = queryAnn .query ();
58
62
NamedQueryDefinition queryDefinition = new NamedQueryDefinitionBuilder ( queryAnn .name () )
@@ -114,14 +118,17 @@ public static void bindNativeQuery(
114
118
115
119
if ( !BinderHelper .isEmptyAnnotationValue ( resultSetMapping ) ) {
116
120
//sql result set usage
117
- builder .setResultSetRef ( resultSetMapping )
118
- .createNamedQueryDefinition ();
121
+ builder .setResultSetRef ( resultSetMapping ).createNamedQueryDefinition ();
119
122
}
120
123
else if ( !void .class .equals ( queryAnn .resultClass () ) ) {
121
124
//class mapping usage
122
125
//FIXME should be done in a second pass due to entity name?
123
- final NativeSQLQueryRootReturn entityQueryReturn =
124
- new NativeSQLQueryRootReturn ( "alias1" , queryAnn .resultClass ().getName (), new HashMap (), LockMode .READ );
126
+ final NativeSQLQueryRootReturn entityQueryReturn = new NativeSQLQueryRootReturn (
127
+ "alias1" ,
128
+ queryAnn .resultClass ().getName (),
129
+ new HashMap (),
130
+ LockMode .READ
131
+ );
125
132
builder .setQueryReturns ( new NativeSQLQueryReturn [] {entityQueryReturn } );
126
133
}
127
134
else {
@@ -153,59 +160,50 @@ public static void bindNativeQuery(
153
160
throw new AnnotationException ( "A named query must have a name when used in class or package level" );
154
161
}
155
162
156
- NamedSQLQueryDefinition query ;
157
- String resultSetMapping = queryAnn .resultSetMapping ();
163
+ final String resultSetMapping = queryAnn .resultSetMapping ();
164
+
165
+ final NamedSQLQueryDefinitionBuilder builder = new NamedSQLQueryDefinitionBuilder ()
166
+ .setName ( queryAnn .name () )
167
+ .setQuery ( queryAnn .query () )
168
+ .setCacheable ( queryAnn .cacheable () )
169
+ .setCacheRegion (
170
+ BinderHelper .isEmptyAnnotationValue ( queryAnn .cacheRegion () )
171
+ ? null
172
+ : queryAnn .cacheRegion ()
173
+ )
174
+ .setTimeout ( queryAnn .timeout () < 0 ? null : queryAnn .timeout () )
175
+ .setFetchSize ( queryAnn .fetchSize () < 0 ? null : queryAnn .fetchSize () )
176
+ .setFlushMode ( getFlushMode ( queryAnn .flushMode () ) )
177
+ .setCacheMode ( getCacheMode ( queryAnn .cacheMode () ) )
178
+ .setReadOnly ( queryAnn .readOnly () )
179
+ .setComment ( BinderHelper .isEmptyAnnotationValue ( queryAnn .comment () ) ? null : queryAnn .comment () )
180
+ .setParameterTypes ( null )
181
+ .setCallable ( queryAnn .callable () );
182
+
183
+
158
184
if ( !BinderHelper .isEmptyAnnotationValue ( resultSetMapping ) ) {
159
185
//sql result set usage
160
- query = new NamedSQLQueryDefinitionBuilder ().setName ( queryAnn .name () )
161
- .setQuery ( queryAnn .query () )
162
- .setResultSetRef ( resultSetMapping )
163
- .setQuerySpaces ( null )
164
- .setCacheable ( queryAnn .cacheable () )
165
- .setCacheRegion (
166
- BinderHelper .isEmptyAnnotationValue ( queryAnn .cacheRegion () ) ?
167
- null :
168
- queryAnn .cacheRegion ()
169
- )
170
- .setTimeout ( queryAnn .timeout () < 0 ? null : queryAnn .timeout () )
171
- .setFetchSize ( queryAnn .fetchSize () < 0 ? null : queryAnn .fetchSize () )
172
- .setFlushMode ( getFlushMode ( queryAnn .flushMode () ) )
173
- .setCacheMode ( getCacheMode ( queryAnn .cacheMode () ) )
174
- .setReadOnly ( queryAnn .readOnly () )
175
- .setComment ( BinderHelper .isEmptyAnnotationValue ( queryAnn .comment () ) ? null : queryAnn .comment () )
176
- .setParameterTypes ( null )
177
- .setCallable ( queryAnn .callable () )
178
- .createNamedQueryDefinition ();
186
+ builder .setResultSetRef ( resultSetMapping );
179
187
}
180
- else if ( !void .class .equals ( queryAnn .resultClass () ) ) {
188
+ else if ( ! void .class .equals ( queryAnn .resultClass () ) ) {
181
189
//class mapping usage
182
190
//FIXME should be done in a second pass due to entity name?
183
- final NativeSQLQueryRootReturn entityQueryReturn =
184
- new NativeSQLQueryRootReturn ( "alias1" , queryAnn .resultClass ().getName (), new HashMap (), LockMode .READ );
185
- query = new NamedSQLQueryDefinitionBuilder ().setName ( queryAnn .name () )
186
- .setQuery ( queryAnn .query () )
187
- .setQueryReturns ( new NativeSQLQueryReturn [] {entityQueryReturn } )
188
- .setQuerySpaces ( null )
189
- .setCacheable ( queryAnn .cacheable () )
190
- .setCacheRegion (
191
- BinderHelper .isEmptyAnnotationValue ( queryAnn .cacheRegion () ) ?
192
- null :
193
- queryAnn .cacheRegion ()
194
- )
195
- .setTimeout ( queryAnn .timeout () < 0 ? null : queryAnn .timeout () )
196
- .setFetchSize ( queryAnn .fetchSize () < 0 ? null : queryAnn .fetchSize () )
197
- .setFlushMode ( getFlushMode ( queryAnn .flushMode () ) )
198
- .setCacheMode ( getCacheMode ( queryAnn .cacheMode () ) )
199
- .setReadOnly ( queryAnn .readOnly () )
200
- .setComment ( BinderHelper .isEmptyAnnotationValue ( queryAnn .comment () ) ? null : queryAnn .comment () )
201
- .setParameterTypes ( null )
202
- .setCallable ( queryAnn .callable () )
203
- .createNamedQueryDefinition ();
191
+ final NativeSQLQueryRootReturn entityQueryReturn = new NativeSQLQueryRootReturn (
192
+ "alias1" ,
193
+ queryAnn .resultClass ().getName (),
194
+ new HashMap (),
195
+ LockMode .READ
196
+ );
197
+ builder .setQueryReturns ( new NativeSQLQueryReturn [] {entityQueryReturn } );
204
198
}
205
199
else {
206
- throw new NotYetImplementedException ( "Pure native scalar queries are not yet supported" );
200
+ LOG . debugf ( "Raw scalar native-query (no explicit result mappings) found : %s" , queryAnn . name () );
207
201
}
202
+
203
+ final NamedSQLQueryDefinition query = builder .createNamedQueryDefinition ();
204
+
208
205
context .getMetadataCollector ().addNamedNativeQuery ( query );
206
+
209
207
if ( LOG .isDebugEnabled () ) {
210
208
LOG .debugf ( "Binding named native query: %s => %s" , query .getName (), queryAnn .query () );
211
209
}
0 commit comments