Skip to content

Commit 4d951f5

Browse files
committed
HHH-18628 Add test for issue
1 parent fc2b1b9 commit 4d951f5

File tree

1 file changed

+111
-0
lines changed

1 file changed

+111
-0
lines changed
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.jpa.criteria;
6+
7+
import java.util.List;
8+
9+
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
10+
import org.hibernate.testing.orm.junit.JiraKey;
11+
import org.hibernate.testing.orm.junit.Jpa;
12+
import org.junit.jupiter.api.AfterEach;
13+
import org.junit.jupiter.api.BeforeEach;
14+
import org.junit.jupiter.api.Test;
15+
16+
import jakarta.persistence.CascadeType;
17+
import jakarta.persistence.Entity;
18+
import jakarta.persistence.FetchType;
19+
import jakarta.persistence.Id;
20+
import jakarta.persistence.OneToOne;
21+
import jakarta.persistence.criteria.CriteriaBuilder;
22+
import jakarta.persistence.criteria.CriteriaQuery;
23+
import jakarta.persistence.criteria.Join;
24+
import jakarta.persistence.criteria.JoinType;
25+
import jakarta.persistence.criteria.Root;
26+
27+
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
28+
29+
@Jpa(
30+
annotatedClasses = {
31+
CriteriaSelectJoinTest.Parent.class,
32+
CriteriaSelectJoinTest.Child.class,
33+
}
34+
)
35+
@JiraKey( "HHH-18628" )
36+
public class CriteriaSelectJoinTest {
37+
38+
@BeforeEach
39+
public void setUp(EntityManagerFactoryScope scope) {
40+
scope.inTransaction(
41+
entityManager -> {
42+
Child child = new Child( 1l );
43+
Parent parent = new Parent( 1l, child );
44+
entityManager.persist( parent );
45+
}
46+
);
47+
}
48+
49+
@AfterEach
50+
public void tearDown(EntityManagerFactoryScope scope) {
51+
scope.inTransaction(
52+
entityManager -> {
53+
entityManager.createQuery( "delete from Child" ).executeUpdate();
54+
entityManager.createQuery( "delete from Parent" ).executeUpdate();
55+
}
56+
);
57+
}
58+
59+
60+
@Test
61+
public void testCriteriaJoin(EntityManagerFactoryScope scope) {
62+
scope.inTransaction(
63+
entityManager -> {
64+
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
65+
66+
CriteriaQuery<Child> query = cb.createQuery( Child.class );
67+
Root<Parent> parent = query.from( Parent.class );
68+
Join<Parent, Child> child = parent.join( "child", JoinType.INNER );
69+
query.select( child );
70+
71+
List<Child> children = entityManager.createQuery( query ).getResultList();
72+
assertThat( children ).isNotNull();
73+
} );
74+
}
75+
76+
@Entity(name = "Parent")
77+
public static class Parent {
78+
@Id
79+
private Long id;
80+
81+
@OneToOne(mappedBy = "parent", cascade = CascadeType.PERSIST)
82+
private Child child;
83+
84+
public Parent() {
85+
}
86+
87+
public Parent(Long id, Child child) {
88+
this.id = id;
89+
this.child = child;
90+
child.parent = this;
91+
}
92+
}
93+
94+
@Entity(name = "Child")
95+
public static class Child {
96+
97+
@Id
98+
private Long id;
99+
100+
@OneToOne(optional = false, fetch = FetchType.LAZY)
101+
private Parent parent;
102+
103+
public Child() {
104+
}
105+
106+
public Child(Long id) {
107+
this.id = id;
108+
}
109+
}
110+
111+
}

0 commit comments

Comments
 (0)