Skip to content

Commit b839bfb

Browse files
committed
[#1885] Add createMutationQuery methods that accept insert and insertSelect criterias
1 parent 55ead93 commit b839bfb

File tree

8 files changed

+135
-0
lines changed

8 files changed

+135
-0
lines changed

hibernate-reactive-core/src/main/java/org/hibernate/reactive/mutiny/Mutiny.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import org.hibernate.proxy.HibernateProxy;
2727
import org.hibernate.query.Order;
2828
import org.hibernate.query.Page;
29+
import org.hibernate.query.criteria.JpaCriteriaInsert;
30+
import org.hibernate.query.criteria.JpaCriteriaInsertSelect;
2931
import org.hibernate.reactive.common.AffectedEntities;
3032
import org.hibernate.reactive.common.Identifier;
3133
import org.hibernate.reactive.common.ResultSetMapping;
@@ -979,6 +981,28 @@ default Uni<Void> lock(Object entity, LockModeType lockModeType) {
979981
*/
980982
MutationQuery createMutationQuery(@SuppressWarnings("rawtypes") CriteriaDelete deleteQuery);
981983

984+
/**
985+
* Create a {@link MutationQuery} from the given insert-select criteria tree
986+
*
987+
* @param insertSelect the insert-select criteria query
988+
*
989+
* @return The {@link MutationQuery} instance for manipulation and execution
990+
*
991+
* @see org.hibernate.query.QueryProducer#createMutationQuery(JpaCriteriaInsert)
992+
*/
993+
MutationQuery createMutationQuery(@SuppressWarnings("rawtypes") JpaCriteriaInsertSelect insertSelect);
994+
995+
/**
996+
* Create a {@link MutationQuery} from the given insert select criteria tree
997+
*
998+
* @param insert the insert select criteria query
999+
*
1000+
* @return The {@link MutationQuery} instance for manipulation and execution
1001+
*
1002+
* @see org.hibernate.query.QueryProducer#createMutationQuery(JpaCriteriaInsert)
1003+
*/
1004+
MutationQuery createMutationQuery(@SuppressWarnings("rawtypes") JpaCriteriaInsert insert);
1005+
9821006
/**
9831007
* Create an instance of {@link Query} for the given HQL/JPQL query
9841008
* string or HQL/JPQL update or delete statement. In the case of an

hibernate-reactive-core/src/main/java/org/hibernate/reactive/mutiny/impl/MutinySessionImpl.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import org.hibernate.LockMode;
2323
import org.hibernate.LockOptions;
2424
import org.hibernate.graph.RootGraph;
25+
import org.hibernate.query.criteria.JpaCriteriaInsert;
26+
import org.hibernate.query.criteria.JpaCriteriaInsertSelect;
2527
import org.hibernate.reactive.common.AffectedEntities;
2628
import org.hibernate.reactive.common.Identifier;
2729
import org.hibernate.reactive.common.ResultSetMapping;
@@ -134,6 +136,16 @@ public MutationQuery createMutationQuery(CriteriaDelete deleteQuery) {
134136
return new MutinyMutationQueryImpl<>( delegate.createReactiveMutationQuery( deleteQuery ), factory );
135137
}
136138

139+
@Override
140+
public MutationQuery createMutationQuery(JpaCriteriaInsertSelect insertSelect) {
141+
return new MutinyMutationQueryImpl<>( delegate.createReactiveMutationQuery( insertSelect ), factory );
142+
}
143+
144+
@Override
145+
public MutationQuery createMutationQuery(JpaCriteriaInsert insert) {
146+
return new MutinyMutationQueryImpl<>( delegate.createReactiveMutationQuery( insert ), factory );
147+
}
148+
137149
@Override @Deprecated
138150
public <R> Query<R> createQuery(String queryString) {
139151
return new MutinyQueryImpl<>( delegate.createReactiveQuery( queryString ), factory );

hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/ReactiveQueryProducer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.hibernate.dialect.Dialect;
1212
import org.hibernate.engine.spi.SessionFactoryImplementor;
1313
import org.hibernate.engine.spi.SharedSessionContractImplementor;
14+
import org.hibernate.query.criteria.JpaCriteriaInsert;
1415
import org.hibernate.query.criteria.JpaCriteriaInsertSelect;
1516
import org.hibernate.reactive.common.AffectedEntities;
1617
import org.hibernate.reactive.common.ResultSetMapping;
@@ -81,6 +82,8 @@ public interface ReactiveQueryProducer extends ReactiveConnectionSupplier {
8182

8283
<R> ReactiveMutationQuery<R> createReactiveMutationQuery(JpaCriteriaInsertSelect<R> insertSelect);
8384

85+
<R> ReactiveMutationQuery<R> createReactiveMutationQuery(JpaCriteriaInsert<R> insert);
86+
8487
<R> ReactiveMutationQuery<R> createNativeReactiveMutationQuery(String sqlString);
8588

8689
<R> ReactiveSelectionQuery<R> createNamedReactiveSelectionQuery(String name);

hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveSessionImpl.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
import org.hibernate.proxy.HibernateProxy;
7070
import org.hibernate.proxy.LazyInitializer;
7171
import org.hibernate.query.IllegalMutationQueryException;
72+
import org.hibernate.query.criteria.JpaCriteriaInsert;
7273
import org.hibernate.query.criteria.JpaCriteriaInsertSelect;
7374
import org.hibernate.query.hql.spi.SqmQueryImplementor;
7475
import org.hibernate.query.named.NamedResultSetMappingMemento;
@@ -79,6 +80,7 @@
7980
import org.hibernate.query.sqm.tree.SqmStatement;
8081
import org.hibernate.query.sqm.tree.delete.SqmDeleteStatement;
8182
import org.hibernate.query.sqm.tree.insert.SqmInsertSelectStatement;
83+
import org.hibernate.query.sqm.tree.insert.SqmInsertStatement;
8284
import org.hibernate.query.sqm.tree.select.SqmQueryGroup;
8385
import org.hibernate.query.sqm.tree.select.SqmQuerySpec;
8486
import org.hibernate.query.sqm.tree.select.SqmSelectStatement;
@@ -553,6 +555,17 @@ public <R> ReactiveMutationQuery<R> createReactiveMutationQuery(JpaCriteriaInser
553555
}
554556
}
555557

558+
@Override
559+
public <R> ReactiveMutationQuery<R> createReactiveMutationQuery(JpaCriteriaInsert<R> insert) {
560+
checkOpen();
561+
try {
562+
return createReactiveCriteriaQuery( (SqmInsertStatement<R>) insert, null );
563+
}
564+
catch ( RuntimeException e ) {
565+
throw getExceptionConverter().convert( e );
566+
}
567+
}
568+
556569
@Override
557570
public <R> ReactiveMutationQuery<R> createNamedReactiveMutationQuery(String queryName) {
558571
return (ReactiveMutationQuery<R>) buildNamedQuery(

hibernate-reactive-core/src/main/java/org/hibernate/reactive/session/impl/ReactiveStatelessSessionImpl.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.hibernate.proxy.HibernateProxy;
4646
import org.hibernate.proxy.LazyInitializer;
4747
import org.hibernate.query.IllegalMutationQueryException;
48+
import org.hibernate.query.criteria.JpaCriteriaInsert;
4849
import org.hibernate.query.criteria.JpaCriteriaInsertSelect;
4950
import org.hibernate.query.hql.spi.SqmQueryImplementor;
5051
import org.hibernate.query.named.NamedResultSetMappingMemento;
@@ -56,6 +57,7 @@
5657
import org.hibernate.query.sqm.tree.SqmStatement;
5758
import org.hibernate.query.sqm.tree.delete.SqmDeleteStatement;
5859
import org.hibernate.query.sqm.tree.insert.SqmInsertSelectStatement;
60+
import org.hibernate.query.sqm.tree.insert.SqmInsertStatement;
5961
import org.hibernate.query.sqm.tree.select.SqmQueryGroup;
6062
import org.hibernate.query.sqm.tree.select.SqmQuerySpec;
6163
import org.hibernate.query.sqm.tree.select.SqmSelectStatement;
@@ -1008,6 +1010,17 @@ public <R> ReactiveMutationQuery<R> createReactiveMutationQuery(JpaCriteriaInser
10081010
}
10091011
}
10101012

1013+
@Override
1014+
public <R> ReactiveMutationQuery<R> createReactiveMutationQuery(JpaCriteriaInsert<R> insert) {
1015+
checkOpen();
1016+
try{
1017+
return createReactiveCriteriaQuery( (SqmInsertStatement<R>) insert, null );
1018+
}
1019+
catch ( RuntimeException e ) {
1020+
throw getExceptionConverter().convert( e );
1021+
}
1022+
}
1023+
10111024
@Override
10121025
public <R> ReactiveSelectionQuery<R> createNamedReactiveSelectionQuery(String queryName) {
10131026
return (ReactiveSelectionQuery<R>) createNamedSelectionQuery( queryName, null );

hibernate-reactive-core/src/main/java/org/hibernate/reactive/stage/Stage.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import org.hibernate.proxy.HibernateProxy;
2828
import org.hibernate.query.Order;
2929
import org.hibernate.query.Page;
30+
import org.hibernate.query.criteria.JpaCriteriaInsert;
31+
import org.hibernate.query.criteria.JpaCriteriaInsertSelect;
3032
import org.hibernate.reactive.common.AffectedEntities;
3133
import org.hibernate.reactive.common.Identifier;
3234
import org.hibernate.reactive.common.ResultSetMapping;
@@ -1016,6 +1018,28 @@ default CompletionStage<Void> lock(Object entity, LockModeType lockModeType) {
10161018
*/
10171019
MutationQuery createMutationQuery(@SuppressWarnings("rawtypes") CriteriaDelete deleteQuery);
10181020

1021+
/**
1022+
* Create a {@link MutationQuery} from the given insert-select criteria tree
1023+
*
1024+
* @param insertSelect the insert-select criteria query
1025+
*
1026+
* @return The {@link MutationQuery} instance for manipulation and execution
1027+
*
1028+
* @see org.hibernate.query.QueryProducer#createMutationQuery(JpaCriteriaInsert)
1029+
*/
1030+
MutationQuery createMutationQuery(@SuppressWarnings("rawtypes") JpaCriteriaInsertSelect insertSelect);
1031+
1032+
/**
1033+
* Create a {@link MutationQuery} from the given insert select criteria tree
1034+
*
1035+
* @param insert the insert select criteria query
1036+
*
1037+
* @return The {@link MutationQuery} instance for manipulation and execution
1038+
*
1039+
* @see org.hibernate.query.QueryProducer#createMutationQuery(JpaCriteriaInsert)
1040+
*/
1041+
MutationQuery createMutationQuery(@SuppressWarnings("rawtypes") JpaCriteriaInsert insert);
1042+
10191043
/**
10201044
* Create an instance of {@link Query} for the given HQL/JPQL query
10211045
* string or HQL/JPQL update or delete statement. In the case of an
@@ -1707,6 +1731,28 @@ default <T> CompletionStage<T> get(Class<T> entityClass, Object id, LockModeType
17071731
*/
17081732
MutationQuery createMutationQuery(@SuppressWarnings("rawtypes") CriteriaDelete deleteQuery);
17091733

1734+
/**
1735+
* Create a {@link MutationQuery} from the given insert-select criteria tree
1736+
*
1737+
* @param insertSelect the insert-select criteria query
1738+
*
1739+
* @return The {@link MutationQuery} instance for manipulation and execution
1740+
*
1741+
* @see org.hibernate.query.QueryProducer#createMutationQuery(JpaCriteriaInsert)
1742+
*/
1743+
MutationQuery createMutationQuery(@SuppressWarnings("rawtypes") JpaCriteriaInsertSelect insertSelect);
1744+
1745+
/**
1746+
* Create a {@link MutationQuery} from the given insert select criteria tree
1747+
*
1748+
* @param insert the insert select criteria query
1749+
*
1750+
* @return The {@link MutationQuery} instance for manipulation and execution
1751+
*
1752+
* @see org.hibernate.query.QueryProducer#createMutationQuery(JpaCriteriaInsert)
1753+
*/
1754+
MutationQuery createMutationQuery(@SuppressWarnings("rawtypes") JpaCriteriaInsert insert);
1755+
17101756
/**
17111757
* Create an instance of {@link Query} for the given SQL query string,
17121758
* or SQL update, insert, or delete statement. In the case of an update,

hibernate-reactive-core/src/main/java/org/hibernate/reactive/stage/impl/StageSessionImpl.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import org.hibernate.LockOptions;
2323
import org.hibernate.graph.RootGraph;
2424
import org.hibernate.jpa.internal.util.LockModeTypeHelper;
25+
import org.hibernate.query.criteria.JpaCriteriaInsert;
26+
import org.hibernate.query.criteria.JpaCriteriaInsertSelect;
2527
import org.hibernate.reactive.common.AffectedEntities;
2628
import org.hibernate.reactive.common.Identifier;
2729
import org.hibernate.reactive.common.ResultSetMapping;
@@ -127,6 +129,16 @@ public MutationQuery createMutationQuery(CriteriaDelete deleteQuery) {
127129
return new StageMutationQueryImpl<>( delegate.createReactiveMutationQuery( deleteQuery ) );
128130
}
129131

132+
@Override
133+
public MutationQuery createMutationQuery(JpaCriteriaInsertSelect insertSelect) {
134+
return new StageMutationQueryImpl<>( delegate.createReactiveMutationQuery( insertSelect ) );
135+
}
136+
137+
@Override
138+
public MutationQuery createMutationQuery(JpaCriteriaInsert insert) {
139+
return new StageMutationQueryImpl<>( delegate.createReactiveMutationQuery( insert ) );
140+
}
141+
130142
@Override
131143
public <T> CompletionStage<T> find(Class<T> entityClass, Object primaryKey) {
132144
return delegate.reactiveFind( entityClass, primaryKey, null, null );

hibernate-reactive-core/src/main/java/org/hibernate/reactive/stage/impl/StageStatelessSessionImpl.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import jakarta.persistence.criteria.CriteriaUpdate;
1212
import org.hibernate.LockMode;
1313
import org.hibernate.graph.spi.RootGraphImplementor;
14+
import org.hibernate.query.criteria.JpaCriteriaInsert;
15+
import org.hibernate.query.criteria.JpaCriteriaInsertSelect;
1416
import org.hibernate.reactive.common.ResultSetMapping;
1517
import org.hibernate.reactive.pool.ReactiveConnection;
1618
import org.hibernate.reactive.session.ReactiveStatelessSession;
@@ -286,6 +288,16 @@ public MutationQuery createMutationQuery(CriteriaDelete deleteQuery) {
286288
return new StageMutationQueryImpl<>( delegate.createReactiveMutationQuery( deleteQuery ) );
287289
}
288290

291+
@Override
292+
public MutationQuery createMutationQuery(JpaCriteriaInsertSelect insertSelect) {
293+
return new StageMutationQueryImpl<>( delegate.createReactiveMutationQuery( insertSelect ) );
294+
}
295+
296+
@Override
297+
public MutationQuery createMutationQuery(JpaCriteriaInsert insert) {
298+
return new StageMutationQueryImpl<>( delegate.createReactiveMutationQuery( insert ) );
299+
}
300+
289301
@Override
290302
public <R> SelectionQuery<R> createQuery(String queryString, Class<R> resultType) {
291303
return new StageSelectionQueryImpl<>( delegate.createReactiveQuery( queryString, resultType ) );

0 commit comments

Comments
 (0)