@@ -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 () )
@@ -112,14 +116,17 @@ public static void bindNativeQuery(
112116
113117 if ( !BinderHelper .isEmptyAnnotationValue ( resultSetMapping ) ) {
114118 //sql result set usage
115- builder .setResultSetRef ( resultSetMapping )
116- .createNamedQueryDefinition ();
119+ builder .setResultSetRef ( resultSetMapping ).createNamedQueryDefinition ();
117120 }
118121 else if ( !void .class .equals ( queryAnn .resultClass () ) ) {
119122 //class mapping usage
120123 //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+ );
123130 builder .setQueryReturns ( new NativeSQLQueryReturn [] {entityQueryReturn } );
124131 }
125132 else {
@@ -151,59 +158,50 @@ public static void bindNativeQuery(
151158 throw new AnnotationException ( "A named query must have a name when used in class or package level" );
152159 }
153160
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+
156182 if ( !BinderHelper .isEmptyAnnotationValue ( resultSetMapping ) ) {
157183 //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 );
177185 }
178- else if ( !void .class .equals ( queryAnn .resultClass () ) ) {
186+ else if ( ! void .class .equals ( queryAnn .resultClass () ) ) {
179187 //class mapping usage
180188 //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 } );
202196 }
203197 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 () );
205199 }
200+
201+ final NamedSQLQueryDefinition query = builder .createNamedQueryDefinition ();
202+
206203 context .getMetadataCollector ().addNamedNativeQuery ( query );
204+
207205 if ( LOG .isDebugEnabled () ) {
208206 LOG .debugf ( "Binding named native query: %s => %s" , query .getName (), queryAnn .query () );
209207 }
0 commit comments