@@ -48,11 +48,15 @@ public static void bindQuery(
4848 NamedQuery queryAnn ,
4949 MetadataBuildingContext context ,
5050 boolean isDefault ) {
51- if ( queryAnn == null ) return ;
51+ if ( queryAnn == null ) {
52+ return ;
53+ }
54+
5255 if ( BinderHelper .isEmptyAnnotationValue ( queryAnn .name () ) ) {
5356 throw new AnnotationException ( "A named query must have a name when used in class or package level" );
5457 }
55- //EJBQL Query
58+
59+ // JPA-QL Query
5660 QueryHintDefinition hints = new QueryHintDefinition ( queryAnn .hints () );
5761 String queryName = queryAnn .query ();
5862 NamedQueryDefinition queryDefinition = new NamedQueryDefinitionBuilder ( queryAnn .name () )
@@ -114,14 +118,17 @@ public static void bindNativeQuery(
114118
115119 if ( !BinderHelper .isEmptyAnnotationValue ( resultSetMapping ) ) {
116120 //sql result set usage
117- builder .setResultSetRef ( resultSetMapping )
118- .createNamedQueryDefinition ();
121+ builder .setResultSetRef ( resultSetMapping ).createNamedQueryDefinition ();
119122 }
120123 else if ( !void .class .equals ( queryAnn .resultClass () ) ) {
121124 //class mapping usage
122125 //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+ );
125132 builder .setQueryReturns ( new NativeSQLQueryReturn [] {entityQueryReturn } );
126133 }
127134 else {
@@ -153,59 +160,50 @@ public static void bindNativeQuery(
153160 throw new AnnotationException ( "A named query must have a name when used in class or package level" );
154161 }
155162
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+
158184 if ( !BinderHelper .isEmptyAnnotationValue ( resultSetMapping ) ) {
159185 //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 );
179187 }
180- else if ( !void .class .equals ( queryAnn .resultClass () ) ) {
188+ else if ( ! void .class .equals ( queryAnn .resultClass () ) ) {
181189 //class mapping usage
182190 //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 } );
204198 }
205199 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 () );
207201 }
202+
203+ final NamedSQLQueryDefinition query = builder .createNamedQueryDefinition ();
204+
208205 context .getMetadataCollector ().addNamedNativeQuery ( query );
206+
209207 if ( LOG .isDebugEnabled () ) {
210208 LOG .debugf ( "Binding named native query: %s => %s" , query .getName (), queryAnn .query () );
211209 }
0 commit comments