51
51
import org .hibernate .query .criteria .JpaCriteriaQuery ;
52
52
import org .hibernate .query .criteria .JpaRoot ;
53
53
import org .hibernate .query .hql .spi .SqmQueryImplementor ;
54
- import org .hibernate .query .named .NamedResultSetMappingMemento ;
55
54
import org .hibernate .query .spi .HqlInterpretation ;
56
55
import org .hibernate .query .spi .QueryImplementor ;
57
- import org .hibernate .query .sql .internal .NativeQueryImpl ;
58
56
import org .hibernate .query .sql .spi .NativeQueryImplementor ;
59
57
import org .hibernate .query .sqm .internal .SqmUtil ;
60
58
import org .hibernate .query .sqm .tree .SqmStatement ;
@@ -372,12 +370,18 @@ private void firePostInsert(Object entity, Object id, Object[] state, EntityPers
372
370
373
371
private CompletionStage <?> generateId (EntityPersister persister , Object entity , Generator generator ) {
374
372
if ( generator .generatesOnInsert () ) {
375
- return generator instanceof ReactiveIdentifierGenerator
376
- ? ( (ReactiveIdentifierGenerator <?>) generator ).generate ( this , this )
377
- : completedFuture ( ( (BeforeExecutionGenerator ) generator ).generate ( this , entity , null , INSERT ) );
378
- }
373
+ if ( generator instanceof ReactiveIdentifierGenerator <?> reactiveGenerator ) {
374
+ return reactiveGenerator .generate (this , this );
375
+ }
376
+ else if ( generator instanceof BeforeExecutionGenerator beforeExecutionGenerator ) {
377
+ return completedFuture ( beforeExecutionGenerator .generate (this , entity , null , INSERT ) );
378
+ }
379
+ else {
380
+ throw new IllegalArgumentException ( "Unsupported generator type: " + generator .getClass ().getName () );
381
+ }
382
+ }
379
383
else {
380
- Object id = persister .getIdentifier ( entity , this );
384
+ final Object id = persister .getIdentifier ( entity , this );
381
385
if ( id == null ) {
382
386
throw new IdentifierGenerationException ( "Identifier of entity '" + persister .getEntityName () + "' must be manually assigned before calling 'insert()'" );
383
387
}
@@ -878,8 +882,7 @@ public <R> ReactiveNativeQueryImplementor<R> createReactiveNativeQuery(String sq
878
882
delayedAfterCompletion ();
879
883
880
884
try {
881
- ReactiveNativeQueryImpl <R > query = new ReactiveNativeQueryImpl <>( sqlString , this );
882
-
885
+ final ReactiveNativeQueryImpl <R > query = new ReactiveNativeQueryImpl <>( sqlString , this );
883
886
if ( isEmpty ( query .getComment () ) ) {
884
887
query .setComment ( "dynamic native SQL query" );
885
888
}
@@ -893,17 +896,18 @@ public <R> ReactiveNativeQueryImplementor<R> createReactiveNativeQuery(String sq
893
896
894
897
@ Override
895
898
public <R > ReactiveNativeQuery <R > createReactiveNativeQuery (String sqlString , Class <R > resultClass ) {
896
- ReactiveNativeQuery <R > query = createReactiveNativeQuery ( sqlString );
897
- if ( Tuple .class .equals ( resultClass ) ) {
898
- query .setTupleTransformer ( new NativeQueryTupleTransformer () );
899
- }
900
- else if ( getFactory ().getMappingMetamodel ().isEntityClass ( resultClass ) ) {
899
+ final ReactiveNativeQuery <R > query = createReactiveNativeQuery ( sqlString );
900
+ addEntityOrResultType ( resultClass , query );
901
+ return query ;
902
+ }
903
+
904
+ private <R > void addEntityOrResultType (Class <R > resultClass , ReactiveNativeQuery <R > query ) {
905
+ if ( getFactory ().getMappingMetamodel ().isEntityClass ( resultClass ) ) {
901
906
query .addEntity ( "alias1" , resultClass .getName (), LockMode .READ );
902
907
}
903
- else {
904
- ( ( NativeQueryImpl <?>) query ). addScalar ( 1 , resultClass );
908
+ else if ( resultClass != Object . class && resultClass != Object []. class ) {
909
+ query . addResultTypeClass ( resultClass );
905
910
}
906
- return query ;
907
911
}
908
912
909
913
@ Override
@@ -912,12 +916,13 @@ public <R> ReactiveNativeQuery<R> createReactiveNativeQuery(
912
916
Class <R > resultClass ,
913
917
String tableAlias ) {
914
918
final ReactiveNativeQuery <R > query = createReactiveNativeQuery ( sqlString );
915
- if ( getFactory ().getMappingMetamodel ().isEntityClass (resultClass ) ) {
919
+ if ( getFactory ().getMappingMetamodel ().isEntityClass ( resultClass ) ) {
916
920
query .addEntity ( tableAlias , resultClass .getName (), LockMode .READ );
917
921
return query ;
918
922
}
919
-
920
- throw new UnknownEntityTypeException ( "unable to locate persister: " + resultClass .getName () );
923
+ else {
924
+ throw new UnknownEntityTypeException ( "unable to locate persister: " + resultClass .getName () );
925
+ }
921
926
}
922
927
923
928
@ Override
@@ -927,19 +932,9 @@ public <R> ReactiveNativeQuery<R> createReactiveNativeQuery(String sqlString, St
927
932
delayedAfterCompletion ();
928
933
929
934
try {
930
- if ( isNotEmpty ( resultSetMappingName ) ) {
931
- final NamedResultSetMappingMemento resultSetMappingMemento = getFactory ().getQueryEngine ()
932
- .getNamedObjectRepository ()
933
- .getResultSetMappingMemento ( resultSetMappingName );
934
-
935
- if ( resultSetMappingMemento == null ) {
936
- throw new HibernateException ( "Could not resolve specified result-set mapping name : " + resultSetMappingName );
937
- }
938
- return new ReactiveNativeQueryImpl <>( sqlString , resultSetMappingMemento , this );
939
- }
940
- else {
941
- return new ReactiveNativeQueryImpl <>( sqlString , this );
942
- }
935
+ return isNotEmpty ( resultSetMappingName )
936
+ ? new ReactiveNativeQueryImpl <>( sqlString , getResultSetMappingMemento ( resultSetMappingName ), this )
937
+ : new ReactiveNativeQueryImpl <>( sqlString , this );
943
938
//TODO: why no applyQuerySettingsAndHints( query ); ???
944
939
}
945
940
catch (RuntimeException he ) {
@@ -954,7 +949,7 @@ public <R> ReactiveNativeQuery<R> createReactiveNativeQuery(
954
949
Class <R > resultClass ) {
955
950
final ReactiveNativeQuery <R > query = createReactiveNativeQuery ( sqlString , resultSetMappingName );
956
951
if ( Tuple .class .equals ( resultClass ) ) {
957
- query .setTupleTransformer ( new NativeQueryTupleTransformer () );
952
+ query .setTupleTransformer ( NativeQueryTupleTransformer . INSTANCE );
958
953
}
959
954
return query ;
960
955
}
@@ -1097,20 +1092,7 @@ public <R> ReactiveNativeQuery<R> createReactiveNativeQuery(
1097
1092
Class <R > resultType ,
1098
1093
AffectedEntities affectedEntities ) {
1099
1094
final ReactiveNativeQuery <R > query = createReactiveNativeQuery ( queryString , affectedEntities );
1100
- return addResultType ( resultType , query );
1101
- }
1102
-
1103
- //TODO: copy/paste from ORM, change visibility
1104
- private <T > ReactiveNativeQuery <T > addResultType (Class <T > resultClass , ReactiveNativeQuery <T > query ) {
1105
- if ( Tuple .class .equals ( resultClass ) ) {
1106
- query .setTupleTransformer ( new NativeQueryTupleTransformer () );
1107
- }
1108
- else if ( getFactory ().getMappingMetamodel ().isEntityClass ( resultClass ) ) {
1109
- query .addEntity ( "alias1" , resultClass .getName (), LockMode .READ );
1110
- }
1111
- else if ( resultClass != Object .class && resultClass != Object [].class ) {
1112
- query .addScalar ( 1 , resultClass );
1113
- }
1095
+ addEntityOrResultType ( resultType , query );
1114
1096
return query ;
1115
1097
}
1116
1098
0 commit comments