Skip to content

Commit 8397bb2

Browse files
committed
HHH-19579 Add test for issue
1 parent 94acfa3 commit 8397bb2

File tree

1 file changed

+152
-0
lines changed

1 file changed

+152
-0
lines changed
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
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;
6+
7+
import jakarta.persistence.CascadeType;
8+
import jakarta.persistence.Column;
9+
import jakarta.persistence.Entity;
10+
import jakarta.persistence.FetchType;
11+
import jakarta.persistence.Id;
12+
import jakarta.persistence.JoinColumn;
13+
import jakarta.persistence.ManyToOne;
14+
import jakarta.persistence.criteria.CriteriaBuilder;
15+
import jakarta.persistence.criteria.CriteriaDelete;
16+
import jakarta.persistence.criteria.CriteriaUpdate;
17+
import jakarta.persistence.criteria.Join;
18+
import jakarta.persistence.criteria.JoinType;
19+
import jakarta.persistence.criteria.Root;
20+
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
21+
import org.hibernate.testing.orm.junit.JiraKey;
22+
import org.hibernate.testing.orm.junit.Jpa;
23+
import org.junit.jupiter.api.AfterEach;
24+
import org.junit.jupiter.api.BeforeEach;
25+
import org.junit.jupiter.api.Test;
26+
27+
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
28+
29+
@Jpa(
30+
annotatedClasses = {
31+
CriteriaUpdateAndDeleteWithJoinTest.Parent.class,
32+
CriteriaUpdateAndDeleteWithJoinTest.Child.class
33+
}
34+
)
35+
@JiraKey( "HHH-19579" )
36+
public class CriteriaUpdateAndDeleteWithJoinTest {
37+
private static final String CHILD_CODE = "123";
38+
39+
@BeforeEach
40+
public void setup(EntityManagerFactoryScope scope) {
41+
scope.inTransaction(
42+
entityManager -> {
43+
Child child = new Child( 1L, CHILD_CODE );
44+
Parent parent = new Parent( 2L, "456", child );
45+
entityManager.persist( parent );
46+
}
47+
);
48+
}
49+
50+
@AfterEach
51+
public void teardown(EntityManagerFactoryScope scope) {
52+
scope.releaseEntityManagerFactory();
53+
}
54+
55+
@Test
56+
public void testUpdate(EntityManagerFactoryScope scope) {
57+
scope.inTransaction(
58+
entityManager -> {
59+
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
60+
CriteriaUpdate<Parent> update = cb.createCriteriaUpdate(Parent.class);
61+
62+
Root<Parent> root = update.from(Parent.class);
63+
Join<Parent,Child> joinColor = root.join("child", JoinType.INNER);
64+
65+
update.set(root.get("code"), "l1s2");
66+
update.where(cb.equal(joinColor.get("code"), cb.parameter(String.class, "code")));
67+
68+
int count = entityManager.createQuery(update).setParameter("code", CHILD_CODE).executeUpdate();
69+
assertThat(count).isEqualTo(1);
70+
}
71+
);
72+
}
73+
74+
@Test
75+
public void testDelete(EntityManagerFactoryScope scope) {
76+
scope.inTransaction(
77+
entityManager -> {
78+
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
79+
CriteriaDelete<Parent> delete = cb.createCriteriaDelete(Parent.class);
80+
81+
Root<Parent> root = delete.from(Parent.class);
82+
Join<Parent,Child> joinColor = root.join("child", JoinType.INNER);
83+
84+
delete.where(cb.equal(joinColor.get("code"), cb.parameter(String.class, "code")));
85+
86+
int count = entityManager.createQuery(delete).setParameter("code", CHILD_CODE).executeUpdate();
87+
assertThat(count).isEqualTo(1);
88+
}
89+
);
90+
}
91+
92+
@Entity(name = "Parent")
93+
public static class Parent {
94+
95+
@Id
96+
private Long id;
97+
98+
@Column(name = "code")
99+
private String code;
100+
101+
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
102+
@JoinColumn(name = "color_id")
103+
private Child child;
104+
105+
public Parent() {
106+
}
107+
108+
public Parent(Long id, String code, Child child) {
109+
this.id = id;
110+
this.code = code;
111+
this.child = child;
112+
}
113+
114+
public Long getId() {
115+
return id;
116+
}
117+
118+
public String getCode() {
119+
return code;
120+
}
121+
122+
public Child getChild() {
123+
return child;
124+
}
125+
}
126+
127+
@Entity(name = "Child")
128+
public static class Child {
129+
130+
@Id
131+
private Long id;
132+
133+
@Column(name = "code")
134+
private String code;
135+
136+
public Child() {
137+
}
138+
139+
public Child(Long id, String code) {
140+
this.id = id;
141+
this.code = code;
142+
}
143+
144+
public Long getId() {
145+
return id;
146+
}
147+
148+
public String getCode() {
149+
return code;
150+
}
151+
}
152+
}

0 commit comments

Comments
 (0)