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