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,69 +896,60 @@ 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
+ handleTupleResultType ( resultClass , query );
901
+ addEntityOrResultType ( resultClass , query );
902
+ return query ;
903
+ }
904
+
905
+ private <R > void addEntityOrResultType (Class <R > resultClass , ReactiveNativeQuery <R > query ) {
906
+ if ( getFactory ().getMappingMetamodel ().isEntityClass ( resultClass ) ) {
901
907
query .addEntity ( "alias1" , resultClass .getName (), LockMode .READ );
902
908
}
903
- else {
904
- ( ( NativeQueryImpl <?>) query ). addScalar ( 1 , resultClass );
909
+ else if ( resultClass != Object . class && resultClass != Object []. class && resultClass != Tuple . class ) {
910
+ query . addResultTypeClass ( resultClass );
905
911
}
906
- return query ;
907
912
}
908
913
909
- @ Override
914
+ @ Override @ Deprecated ( forRemoval = true )
910
915
public <R > ReactiveNativeQuery <R > createReactiveNativeQuery (
911
916
String sqlString ,
912
917
Class <R > resultClass ,
913
918
String tableAlias ) {
914
919
final ReactiveNativeQuery <R > query = createReactiveNativeQuery ( sqlString );
915
- if ( getFactory ().getMappingMetamodel ().isEntityClass (resultClass ) ) {
920
+ if ( getFactory ().getMappingMetamodel ().isEntityClass ( resultClass ) ) {
916
921
query .addEntity ( tableAlias , resultClass .getName (), LockMode .READ );
917
922
return query ;
918
923
}
919
-
920
- throw new UnknownEntityTypeException ( "unable to locate persister: " + resultClass .getName () );
924
+ else {
925
+ throw new UnknownEntityTypeException ( "unable to locate persister: " + resultClass .getName () );
926
+ }
921
927
}
922
928
923
- @ Override
929
+ @ Override @ Deprecated ( forRemoval = true )
924
930
public <R > ReactiveNativeQuery <R > createReactiveNativeQuery (String sqlString , String resultSetMappingName ) {
925
931
checkOpen ();
926
932
pulseTransactionCoordinator ();
927
933
delayedAfterCompletion ();
928
934
929
935
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
- }
936
+ return isNotEmpty ( resultSetMappingName )
937
+ ? new ReactiveNativeQueryImpl <>( sqlString , getResultSetMappingMemento ( resultSetMappingName ), this )
938
+ : new ReactiveNativeQueryImpl <>( sqlString , this );
943
939
//TODO: why no applyQuerySettingsAndHints( query ); ???
944
940
}
945
941
catch (RuntimeException he ) {
946
942
throw getExceptionConverter ().convert ( he );
947
943
}
948
944
}
949
945
950
- @ Override
946
+ @ Override @ Deprecated ( forRemoval = true )
951
947
public <R > ReactiveNativeQuery <R > createReactiveNativeQuery (
952
948
String sqlString ,
953
949
String resultSetMappingName ,
954
950
Class <R > resultClass ) {
955
951
final ReactiveNativeQuery <R > query = createReactiveNativeQuery ( sqlString , resultSetMappingName );
956
- if ( Tuple .class .equals ( resultClass ) ) {
957
- query .setTupleTransformer ( new NativeQueryTupleTransformer () );
958
- }
952
+ handleTupleResultType ( resultClass , query );
959
953
return query ;
960
954
}
961
955
@@ -1097,21 +1091,15 @@ public <R> ReactiveNativeQuery<R> createReactiveNativeQuery(
1097
1091
Class <R > resultType ,
1098
1092
AffectedEntities affectedEntities ) {
1099
1093
final ReactiveNativeQuery <R > query = createReactiveNativeQuery ( queryString , affectedEntities );
1100
- return addResultType ( resultType , query );
1094
+ handleTupleResultType ( resultType , query );
1095
+ addEntityOrResultType ( resultType , query );
1096
+ return query ;
1101
1097
}
1102
1098
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 () );
1099
+ private static <R > void handleTupleResultType (Class <R > resultType , ReactiveNativeQuery <R > query ) {
1100
+ if ( Tuple .class .equals (resultType ) ) {
1101
+ query .setTupleTransformer ( NativeQueryTupleTransformer .INSTANCE );
1107
1102
}
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
- }
1114
- return query ;
1115
1103
}
1116
1104
1117
1105
@ Override
0 commit comments