Skip to content

Commit 0a24def

Browse files
committed
HHH-19324 - Switch tests using hbm.xml to use mapping.xml
1 parent 2adbc96 commit 0a24def

File tree

1 file changed

+48
-26
lines changed

1 file changed

+48
-26
lines changed

hibernate-core/src/test/java/org/hibernate/orm/test/mapping/fetch/subselect/SubselectFetchTest.java

Lines changed: 48 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
*/
55
package org.hibernate.orm.test.mapping.fetch.subselect;
66

7-
import java.util.List;
8-
7+
import jakarta.persistence.criteria.CriteriaBuilder;
8+
import jakarta.persistence.criteria.CriteriaQuery;
9+
import jakarta.persistence.criteria.Root;
910
import org.hibernate.Hibernate;
1011
import org.hibernate.cfg.AvailableSettings;
1112
import org.hibernate.collection.spi.PersistentCollection;
12-
1313
import org.hibernate.testing.jdbc.SQLStatementInspector;
1414
import org.hibernate.testing.orm.junit.DomainModel;
15-
import org.hibernate.testing.orm.junit.FailureExpected;
15+
import org.hibernate.testing.orm.junit.NotImplementedYet;
1616
import org.hibernate.testing.orm.junit.ServiceRegistry;
1717
import org.hibernate.testing.orm.junit.SessionFactory;
1818
import org.hibernate.testing.orm.junit.SessionFactoryScope;
@@ -21,10 +21,7 @@
2121
import org.junit.jupiter.api.BeforeEach;
2222
import org.junit.jupiter.api.Test;
2323

24-
import jakarta.persistence.criteria.CriteriaBuilder;
25-
import jakarta.persistence.criteria.CriteriaQuery;
26-
import jakarta.persistence.criteria.JoinType;
27-
import jakarta.persistence.criteria.Root;
24+
import java.util.List;
2825

2926
import static org.assertj.core.api.Assertions.assertThat;
3027
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -34,6 +31,7 @@
3431
/**
3532
* @author Gavin King
3633
*/
34+
@SuppressWarnings("JUnitMalformedDeclaration")
3735
@ServiceRegistry(
3836
settings = {
3937
@Setting( name = AvailableSettings.GENERATE_STATISTICS, value = "true" ),
@@ -42,7 +40,7 @@
4240
)
4341
@DomainModel(xmlMappings = "/mappings/subselectfetch/parent-child.xml")
4442
@SessionFactory( useCollectingStatementInspector = true )
45-
@FailureExpected(reason = "SUBSELECT fetch defined in mapping.xml not working - https://hibernate.atlassian.net/browse/HHH-19316")
43+
@NotImplementedYet(reason = "SUBSELECT fetch defined in mapping.xml not working - https://hibernate.atlassian.net/browse/HHH-19316")
4644
public class SubselectFetchTest {
4745
@BeforeEach
4846
public void prepareTestData(SessionFactoryScope scope) {
@@ -281,24 +279,48 @@ public void testSubselectFetchWithLimit(SessionFactoryScope scope) {
281279
}
282280

283281
@Test
284-
public void testManyToManyCriteriaJoin(SessionFactoryScope scope) {
285-
scope.inTransaction(
286-
s -> {
287-
CriteriaBuilder criteriaBuilder = s.getCriteriaBuilder();
288-
CriteriaQuery<Parent> criteria = criteriaBuilder.createQuery( Parent.class );
289-
Root<Parent> root = criteria.from( Parent.class );
290-
root.join( "moreChildren", JoinType.INNER )
291-
.join( "friends", JoinType.INNER );
292-
criteria.orderBy( criteriaBuilder.desc( root.get( "name" ) ) );
293-
294-
s.createQuery( criteria ).list();
295-
296-
criteria = criteriaBuilder.createQuery( Parent.class );
297-
root = criteria.from( Parent.class );
298-
root.fetch( "moreChildren", JoinType.LEFT ).fetch( "friends", JoinType.LEFT );
299-
criteria.orderBy( criteriaBuilder.desc( root.get( "name" ) ) );
282+
void testCriteria(SessionFactoryScope scope) {
283+
final SQLStatementInspector sqlCollector = scope.getCollectingStatementInspector();
284+
sqlCollector.clear();
285+
scope.inTransaction( (session) -> {
286+
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
287+
CriteriaQuery<Parent> criteria = criteriaBuilder.createQuery( Parent.class );
288+
Root<Parent> root = criteria.from( Parent.class );
289+
criteria.where( criteriaBuilder.isNotNull( root.get( "name" ) ) );
290+
criteria.orderBy( criteriaBuilder.desc( root.get( "name" ) ) );
291+
292+
final List<Parent> results = session.createQuery( criteria ).list();
293+
assertThat( results ).hasSize( 2 );
294+
assertThat( sqlCollector.getSqlQueries() ).hasSize( 1 );
295+
296+
sqlCollector.clear();
297+
boolean firstPass = true;
298+
for ( Parent result : results ) {
299+
if ( firstPass ) {
300+
firstPass = false;
301+
302+
assertThat( Hibernate.isInitialized( result.getChildren() ) ).isFalse();
303+
assertThat( Hibernate.isInitialized( result.getMoreChildren() ) ).isFalse();
304+
305+
// trigger initialization
306+
result.getChildren().size();
307+
result.getMoreChildren().size();
308+
309+
assertThat( Hibernate.isInitialized( result.getChildren() ) ).isTrue();
310+
assertThat( Hibernate.isInitialized( result.getMoreChildren() ) ).isTrue();
311+
312+
// make sure the fetch happened by subselect
313+
assertThat( sqlCollector.getSqlQueries() ).hasSize( 2 );
314+
assertThat( sqlCollector.getSqlQueries().get( 0 ) ).contains( ".name is not null" );
315+
assertThat( sqlCollector.getSqlQueries().get( 1 ) ).contains( ".name is not null" );
300316
}
301-
);
317+
else {
318+
// the subselect fetch triggered from first-pass should have initialized all
319+
assertThat( Hibernate.isInitialized( result.getChildren() ) ).isTrue();
320+
assertThat( Hibernate.isInitialized( result.getMoreChildren() ) ).isTrue();
321+
}
322+
}
323+
} );
302324
}
303325

304326
@Test

0 commit comments

Comments
 (0)