32
32
import java .util .Map ;
33
33
import java .util .Set ;
34
34
35
+ import org .jboss .logging .Logger ;
36
+
35
37
import org .hibernate .CacheMode ;
36
38
import org .hibernate .FlushMode ;
37
39
import org .hibernate .LockMode ;
38
- import org .hibernate .bytecode .buildtime .spi .Logger ;
39
40
import org .hibernate .cfg .HbmBinder ;
40
41
import org .hibernate .engine .ResultSetMappingDefinition ;
41
42
import org .hibernate .engine .query .spi .sql .NativeSQLQueryJoinReturn ;
47
48
import org .hibernate .internal .CoreMessageLogger ;
48
49
import org .hibernate .internal .jaxb .Origin ;
49
50
import org .hibernate .internal .jaxb .mapping .hbm .EntityElement ;
51
+ import org .hibernate .internal .jaxb .mapping .hbm .JaxbClassElement ;
50
52
import org .hibernate .internal .jaxb .mapping .hbm .JaxbDatabaseObjectElement ;
51
53
import org .hibernate .internal .jaxb .mapping .hbm .JaxbFetchProfileElement ;
52
54
import org .hibernate .internal .jaxb .mapping .hbm .JaxbFilterDefElement ;
53
55
import org .hibernate .internal .jaxb .mapping .hbm .JaxbHibernateMapping ;
54
56
import org .hibernate .internal .jaxb .mapping .hbm .JaxbIdentifierGeneratorElement ;
55
57
import org .hibernate .internal .jaxb .mapping .hbm .JaxbImportElement ;
58
+ import org .hibernate .internal .jaxb .mapping .hbm .JaxbJoinedSubclassElement ;
56
59
import org .hibernate .internal .jaxb .mapping .hbm .JaxbLoadCollectionElement ;
57
60
import org .hibernate .internal .jaxb .mapping .hbm .JaxbQueryElement ;
58
61
import org .hibernate .internal .jaxb .mapping .hbm .JaxbQueryParamElement ;
61
64
import org .hibernate .internal .jaxb .mapping .hbm .JaxbReturnJoinElement ;
62
65
import org .hibernate .internal .jaxb .mapping .hbm .JaxbReturnScalarElement ;
63
66
import org .hibernate .internal .jaxb .mapping .hbm .JaxbSqlQueryElement ;
67
+ import org .hibernate .internal .jaxb .mapping .hbm .JaxbSubclassElement ;
64
68
import org .hibernate .internal .jaxb .mapping .hbm .JaxbSynchronizeElement ;
65
69
import org .hibernate .internal .jaxb .mapping .hbm .JaxbTypedefElement ;
70
+ import org .hibernate .internal .jaxb .mapping .hbm .JaxbUnionSubclassElement ;
66
71
import org .hibernate .internal .util .StringHelper ;
67
72
import org .hibernate .internal .util .Value ;
68
73
import org .hibernate .internal .util .collections .CollectionHelper ;
69
- import org .hibernate .mapping .PersistentClass ;
70
74
import org .hibernate .metamodel .spi .binding .EntityBinding ;
71
75
import org .hibernate .metamodel .spi .binding .FetchProfile ;
72
76
import org .hibernate .metamodel .spi .relational .AuxiliaryDatabaseObject ;
88
92
* @author Strong Liu
89
93
*/
90
94
public class HibernateMappingProcessor {
91
- private static final CoreMessageLogger LOG = org .jboss
92
- .logging
93
- .Logger
95
+ private static final CoreMessageLogger LOG = Logger
94
96
.getMessageLogger ( CoreMessageLogger .class , HibernateMappingProcessor .class .getName () );
95
97
private final MetadataImplementor metadata ;
96
98
private final MappingDocument mappingDocument ;
@@ -244,23 +246,50 @@ private void processImports() {
244
246
metadata .addImport ( className , rename );
245
247
}
246
248
if ( root .isAutoImport () ) {
247
- for ( Object obj : root .getClazzOrSubclassOrJoinedSubclass () ) {
248
- EntityElement entityElement = ( EntityElement ) obj ;
249
- String qualifiedName = bindingContext ().determineEntityName ( entityElement );
250
- metadata .addImport ( entityElement .getEntityName () == null
251
- ? entityElement .getName ()
252
- : entityElement .getEntityName (), qualifiedName );
249
+ for (final JaxbClassElement element : root .getClazz ()){
250
+ processEntityElement ( element );
251
+ }
252
+ for (final JaxbJoinedSubclassElement element : root .getJoinedSubclass ()){
253
+ processEntityElement ( element );
254
+ }
255
+ for (final JaxbUnionSubclassElement element : root .getUnionSubclass ()){
256
+ processEntityElement ( element );
257
+ }
258
+ for (final JaxbSubclassElement element : root .getSubclass ()){
259
+ processEntityElement ( element );
253
260
}
254
261
}
255
262
}
256
263
264
+ private void processEntityElement (EntityElement element ) {
265
+ EntityElement entityElement = element ;
266
+ String qualifiedName = bindingContext ().determineEntityName ( entityElement );
267
+ metadata .addImport ( entityElement .getEntityName () == null
268
+ ? entityElement .getName ()
269
+ : entityElement .getEntityName (), qualifiedName );
270
+ }
271
+
257
272
private void processResultSetMappings () {
258
273
List <JaxbResultsetElement > resultsetElements = new ArrayList <JaxbResultsetElement >();
259
274
if ( CollectionHelper .isNotEmpty ( mappingRoot ().getResultset () ) ) {
260
275
resultsetElements .addAll ( mappingRoot ().getResultset () );
261
276
}
262
- for ( Object obj : mappingRoot ().getClazzOrSubclassOrJoinedSubclass () ) {
263
- EntityElement element = EntityElement .class .cast ( obj );
277
+ for (final JaxbClassElement element : mappingRoot ().getClazz ()){
278
+ if ( CollectionHelper .isNotEmpty ( element .getResultset () ) ) {
279
+ resultsetElements .addAll ( element .getResultset () );
280
+ }
281
+ }
282
+ for (final JaxbJoinedSubclassElement element : mappingRoot ().getJoinedSubclass ()){
283
+ if ( CollectionHelper .isNotEmpty ( element .getResultset () ) ) {
284
+ resultsetElements .addAll ( element .getResultset () );
285
+ }
286
+ }
287
+ for (final JaxbUnionSubclassElement element : mappingRoot ().getUnionSubclass ()){
288
+ if ( CollectionHelper .isNotEmpty ( element .getResultset () ) ) {
289
+ resultsetElements .addAll ( element .getResultset () );
290
+ }
291
+ }
292
+ for (final JaxbSubclassElement element : mappingRoot ().getSubclass ()){
264
293
if ( CollectionHelper .isNotEmpty ( element .getResultset () ) ) {
265
294
resultsetElements .addAll ( element .getResultset () );
266
295
}
@@ -276,32 +305,33 @@ private void processResultSetMappings() {
276
305
277
306
private void bindResultSetMappingDefinitions (JaxbResultsetElement element ) {
278
307
final ResultSetMappingDefinition definition = new ResultSetMappingDefinition ( element .getName () );
279
- final List returns = element .getReturnScalarOrReturnOrReturnJoin ();
280
308
int cnt =0 ;
281
- for ( final Object obj : returns ) {
309
+ NativeSQLQueryReturn nativeSQLQueryReturn ;
310
+ for (final JaxbReturnScalarElement r : element .getReturnScalar ()){
282
311
cnt ++;
283
- final NativeSQLQueryReturn nativeSQLQueryReturn ;
284
- if ( JaxbReturnScalarElement . class . isInstance ( obj ) ) {
285
- JaxbReturnScalarElement scalarElement = JaxbReturnScalarElement . class . cast ( obj );
286
- String column = scalarElement . getColumn ( );
287
- String typeFromXML = scalarElement . getType ( );
288
- Type type = metadata . getTypeResolver (). heuristicType ( typeFromXML );
289
- nativeSQLQueryReturn = new NativeSQLQueryScalarReturn ( column , type );
290
- }
291
- else if ( JaxbReturnJoinElement . class . isInstance ( obj ) ) {
292
- nativeSQLQueryReturn = bindReturnJoin ( JaxbReturnJoinElement . class . cast ( obj ), cnt );
312
+ String column = r . getColumn () ;
313
+ String typeFromXML = r . getType ();
314
+ Type type = metadata . getTypeResolver (). heuristicType ( typeFromXML );
315
+ nativeSQLQueryReturn = new NativeSQLQueryScalarReturn ( column , type );
316
+ definition . addQueryReturn ( nativeSQLQueryReturn );
317
+ }
318
+ for ( final JaxbReturnJoinElement r : element . getReturnJoin ()){
319
+ cnt ++;
320
+ nativeSQLQueryReturn = bindReturnJoin ( r , cnt );
321
+ definition . addQueryReturn ( nativeSQLQueryReturn );
293
322
294
- }
295
- else if ( JaxbLoadCollectionElement .class .isInstance ( obj ) ) {
296
- nativeSQLQueryReturn = bindLoadCollection (JaxbLoadCollectionElement .class .cast ( obj ), cnt );
297
- }
298
- else if ( JaxbReturnElement .class .isInstance ( obj ) ) {
299
- nativeSQLQueryReturn = bindReturn (JaxbReturnElement .class .cast ( obj ), cnt );
323
+ }
324
+ for (final JaxbLoadCollectionElement r : element .getLoadCollection ()){
325
+ cnt ++;
326
+ nativeSQLQueryReturn = bindLoadCollection ( r , cnt );
327
+ definition .addQueryReturn ( nativeSQLQueryReturn );
300
328
301
- }else {
302
- throw new MappingException ( "unknown type of Result set mapping return: " +obj .getClass ().getName () , origin ());
303
- }
329
+ }
330
+ for (final JaxbReturnElement r : element .getReturn ()){
331
+ cnt ++;
332
+ nativeSQLQueryReturn = bindReturn ( r , cnt );
304
333
definition .addQueryReturn ( nativeSQLQueryReturn );
334
+
305
335
}
306
336
metadata .addResultSetMapping ( definition );
307
337
0 commit comments