Skip to content

Commit f1d1ef5

Browse files
committed
HHH-19364 make CriteriaDefinition work nicely with Augmentation
1 parent ea06673 commit f1d1ef5

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

hibernate-core/src/main/java/org/hibernate/query/criteria/CriteriaDefinition.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,11 @@ public CriteriaDefinition(SessionFactory factory, CriteriaQuery<R> baseQuery) {
169169
query = (JpaCriteriaQuery<R>) baseQuery;
170170
}
171171

172+
public CriteriaDefinition(CriteriaQuery<R> baseQuery) {
173+
super( ((JpaCriteriaQuery<R>) baseQuery).getCriteriaBuilder() );
174+
query = (JpaCriteriaQuery<R>) baseQuery;
175+
}
176+
172177
public CriteriaDefinition(EntityManagerFactory factory, Class<R> resultType) {
173178
super( factory.getCriteriaBuilder() );
174179
query = createQuery( resultType );

hibernate-core/src/test/java/org/hibernate/orm/test/query/dynamic/SimpleQuerySpecificationTests.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.hibernate.query.IllegalMutationQueryException;
99
import org.hibernate.query.IllegalSelectQueryException;
1010
import org.hibernate.query.Order;
11+
import org.hibernate.query.criteria.CriteriaDefinition;
1112
import org.hibernate.query.programmatic.MutationSpecification;
1213
import org.hibernate.query.programmatic.SelectionSpecification;
1314
import org.hibernate.query.range.Range;
@@ -195,7 +196,7 @@ void testCriteriaForm(SessionFactoryScope factoryScope) {
195196
}
196197

197198
@Test
198-
void testCriteriaFormWithMutation(SessionFactoryScope factoryScope) {
199+
void testAugmentation(SessionFactoryScope factoryScope) {
199200
final SQLStatementInspector sqlCollector = factoryScope.getCollectingStatementInspector();
200201

201202
factoryScope.inTransaction( (session) -> {
@@ -211,6 +212,27 @@ void testCriteriaFormWithMutation(SessionFactoryScope factoryScope) {
211212
assertThat( sqlCollector.getSqlQueries().get( 0 ) ).contains( " order by be1_0.position" );
212213
}
213214

215+
@Test
216+
void testAugmentationViaCriteriaDefinition(SessionFactoryScope factoryScope) {
217+
final SQLStatementInspector sqlCollector = factoryScope.getCollectingStatementInspector();
218+
219+
factoryScope.inTransaction( (session) -> {
220+
sqlCollector.clear();
221+
SelectionSpecification.create( BasicEntity.class )
222+
.addAugmentation( (builder, query, entity) ->
223+
new CriteriaDefinition<>( query ) {{
224+
where( like( entity.get( BasicEntity_.name ), "%" ),
225+
equal( entity.get( BasicEntity_.position), 1 ) );
226+
}}
227+
)
228+
.addOrdering( Order.asc( BasicEntity_.position ) )
229+
.createQuery( session )
230+
.getResultList();
231+
} );
232+
233+
assertThat( sqlCollector.getSqlQueries() ).hasSize( 1 );
234+
assertThat( sqlCollector.getSqlQueries().get( 0 ) ).contains( " order by be1_0.position" );
235+
}
214236
@Test
215237
void testBaseParameters(SessionFactoryScope factoryScope) {
216238
final SQLStatementInspector sqlCollector = factoryScope.getCollectingStatementInspector();

0 commit comments

Comments
 (0)