Skip to content

Commit 9935397

Browse files
committed
HHH-19065 Add test for issue
1 parent 5c1edfa commit 9935397

File tree

1 file changed

+58
-4
lines changed
  • hibernate-core/src/test/java/org/hibernate/orm/test/query/count

1 file changed

+58
-4
lines changed

hibernate-core/src/test/java/org/hibernate/orm/test/query/count/CountTest.java

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,13 @@
1414
import jakarta.persistence.criteria.JoinType;
1515
import jakarta.persistence.criteria.ParameterExpression;
1616
import jakarta.persistence.criteria.Root;
17+
import org.hibernate.engine.spi.SessionImplementor;
18+
import org.hibernate.query.spi.QueryImplementor;
1719
import org.hibernate.testing.orm.junit.DomainModel;
20+
import org.hibernate.testing.orm.junit.Jira;
1821
import org.hibernate.testing.orm.junit.SessionFactory;
1922
import org.hibernate.testing.orm.junit.SessionFactoryScope;
23+
import org.junit.jupiter.api.AfterEach;
2024
import org.junit.jupiter.api.Test;
2125

2226
import java.util.List;
@@ -28,7 +32,6 @@
2832
public class CountTest {
2933

3034
@Test void testCount(SessionFactoryScope scope) {
31-
scope.inTransaction(session -> session.createMutationQuery("delete Book").executeUpdate());
3235
scope.inTransaction(session -> {
3336
session.persist(new Book("9781932394153", "Hibernate in Action"));
3437
session.persist(new Book("9781617290459", "Java Persistence with Hibernate"));
@@ -64,7 +67,6 @@ public class CountTest {
6467
}
6568

6669
@Test void testCountNative(SessionFactoryScope scope) {
67-
scope.inTransaction(session -> session.createMutationQuery("delete Book").executeUpdate());
6870
scope.inTransaction(session -> {
6971
session.persist(new Book("9781932394153", "Hibernate in Action"));
7072
session.persist(new Book("9781617290459", "Java Persistence with Hibernate"));
@@ -86,7 +88,6 @@ public class CountTest {
8688
}
8789

8890
@Test void testCountCriteria(SessionFactoryScope scope) {
89-
scope.inTransaction(session -> session.createMutationQuery("delete Book").executeUpdate());
9091
scope.inTransaction(session -> {
9192
session.persist(new Book("9781932394153", "Hibernate in Action"));
9293
session.persist(new Book("9781617290459", "Java Persistence with Hibernate"));
@@ -120,6 +121,50 @@ public class CountTest {
120121
});
121122
}
122123

124+
@Test
125+
@Jira( "https://hibernate.atlassian.net/browse/HHH-19065" )
126+
public void testJoins(SessionFactoryScope scope) {
127+
scope.inTransaction( session -> {
128+
Publisher p = new Publisher( 1L, "Manning" );
129+
session.persist( p );
130+
final Book book = new Book( "9781932394153", "Hibernate in Action" );
131+
book.publisher = p;
132+
session.persist( book );
133+
session.persist( new Book( "9781617290459", "Java Persistence with Hibernate" ) );
134+
} );
135+
scope.inSession( session -> {
136+
// explicit inner join
137+
assertCount( 1, "select p from Book b join b.publisher p", Publisher.class, session );
138+
assertCount( 1, "select p.name from Book b join b.publisher p", String.class, session );
139+
// explicit left join
140+
assertCount( 2, "select p from Book b left join b.publisher p", Publisher.class, session );
141+
assertCount( 2, "select p.name from Book b left join b.publisher p", String.class, session );
142+
// implicit join
143+
assertCount( 1, "select b.publisher from Book b", Publisher.class, session );
144+
assertCount( 1, "select b.publisher from Book b join b.publisher", Publisher.class, session );
145+
assertCount( 1, "select b.publisher.name from Book b", String.class, session );
146+
assertCount( 1, "select publisher.name from Book b left join b.publisher", String.class, session );
147+
assertCount( 1,
148+
"select publisher.name from Book b left join b.publisher where publisher.name is null or length(publisher.name) > 0",
149+
String.class, session );
150+
// selecting only the id does not create an explicit join
151+
assertCount( 2, "select b.publisher.id from Book b", Long.class, session );
152+
} );
153+
}
154+
155+
private <T> void assertCount(int expected, String hql, Class<T> resultClass, SessionImplementor session) {
156+
final QueryImplementor<T> query = session.createQuery( hql, resultClass );
157+
final List<T> resultList = query.getResultList();
158+
final long resultCount = query.getResultCount();
159+
assertEquals( expected, resultList.size() );
160+
assertEquals( expected, resultCount );
161+
}
162+
163+
@AfterEach
164+
public void tearDown(SessionFactoryScope scope) {
165+
scope.getSessionFactory().getSchemaManager().truncateMappedObjects();
166+
}
167+
123168
@Entity(name="Book")
124169
@Table(name = "books")
125170
static class Book {
@@ -151,6 +196,15 @@ static class Author {
151196
@Entity(name="Publisher")
152197
@Table(name = "pubs")
153198
static class Publisher {
154-
@Id String name;
199+
@Id Long id;
200+
String name;
201+
202+
Publisher() {
203+
}
204+
205+
Publisher(Long id, String name) {
206+
this.id = id;
207+
this.name = name;
208+
}
155209
}
156210
}

0 commit comments

Comments
 (0)