Skip to content

Commit 54f5844

Browse files
committed
HHH-12712 add test showing issue resolved
1 parent ed076ca commit 54f5844

File tree

2 files changed

+202
-0
lines changed

2 files changed

+202
-0
lines changed
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.query.onetoone;
6+
7+
import jakarta.persistence.CascadeType;
8+
import jakarta.persistence.Entity;
9+
import jakarta.persistence.Id;
10+
import jakarta.persistence.OneToOne;
11+
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
12+
import org.hibernate.testing.orm.junit.JiraKey;
13+
import org.hibernate.testing.orm.junit.Jpa;
14+
import org.junit.jupiter.api.Test;
15+
16+
import static org.junit.jupiter.api.Assertions.assertEquals;
17+
18+
@Jpa(annotatedClasses = {QueryOneToOneFKIsNullTest.Parent.class,
19+
QueryOneToOneFKIsNullTest.Child.class})
20+
@JiraKey("HHH-12712")
21+
public class QueryOneToOneFKIsNullTest {
22+
@Test
23+
public void test(EntityManagerFactoryScope scope) {
24+
scope.inTransaction(entityManager -> {
25+
var parent1 = new Parent(1);
26+
new Child(3, parent1);
27+
entityManager.persist(parent1);
28+
var parent2 = new Parent(2);
29+
entityManager.persist(parent2);
30+
});
31+
32+
scope.inTransaction(entityManager -> {
33+
var query = entityManager.createQuery("from Parent p where p.child is null", Parent.class);
34+
var parents = query.getResultList();
35+
assertEquals(1, parents.size());
36+
assertEquals(2L, parents.get(0).getId());
37+
});
38+
}
39+
40+
@Entity(name = "Parent")
41+
static class Parent {
42+
@Id
43+
private long id;
44+
45+
@OneToOne(mappedBy = QueryOneToOneFKIsNullTest_.Child_.PARENT,
46+
cascade = CascadeType.ALL)
47+
private Child child;
48+
49+
Parent() {}
50+
51+
public Parent(long id) {
52+
this.id = id;
53+
}
54+
55+
public long getId() {
56+
return id;
57+
}
58+
59+
public Child getChild() {
60+
return child;
61+
}
62+
63+
void setChild(Child child) {
64+
this.child = child;
65+
}
66+
67+
@Override
68+
public String toString() {
69+
return "Parent [id=" + id + ", child=" + child + "]";
70+
}
71+
}
72+
73+
74+
@Entity(name = "Child")
75+
static class Child {
76+
@Id
77+
private long id;
78+
79+
@OneToOne
80+
private Parent parent;
81+
82+
Child() {}
83+
84+
public Child(long id, Parent parent) {
85+
this.id = id;
86+
setParent(parent);
87+
}
88+
89+
public Parent getParent() {
90+
return parent;
91+
}
92+
93+
public void setParent(Parent parent) {
94+
this.parent = parent;
95+
parent.setChild(this);
96+
}
97+
98+
@Override
99+
public String toString() {
100+
return "Child [id=" + id + "]";
101+
}
102+
}
103+
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.query.onetoone;
6+
7+
import jakarta.persistence.CascadeType;
8+
import jakarta.persistence.Entity;
9+
import jakarta.persistence.Id;
10+
import jakarta.persistence.OneToOne;
11+
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
12+
import org.hibernate.testing.orm.junit.JiraKey;
13+
import org.hibernate.testing.orm.junit.Jpa;
14+
import org.junit.jupiter.api.Test;
15+
16+
import static org.junit.jupiter.api.Assertions.assertEquals;
17+
18+
@Jpa(annotatedClasses = {QueryOneToOnePKIsNullTest.Parent.class,
19+
QueryOneToOnePKIsNullTest.Child.class})
20+
@JiraKey("HHH-12712")
21+
public class QueryOneToOnePKIsNullTest {
22+
@Test
23+
public void test(EntityManagerFactoryScope scope) {
24+
scope.inTransaction(entityManager -> {
25+
var parent1 = new Parent(1);
26+
new Child(parent1);
27+
entityManager.persist(parent1);
28+
var parent2 = new Parent(2);
29+
entityManager.persist(parent2);
30+
});
31+
32+
scope.inTransaction(entityManager -> {
33+
var query = entityManager.createQuery("from Parent p where p.child is null", Parent.class);
34+
var parents = query.getResultList();
35+
assertEquals(1, parents.size());
36+
assertEquals(2L, parents.get(0).getId());
37+
});
38+
}
39+
40+
@Entity(name = "Parent")
41+
static class Parent {
42+
@Id
43+
private long id;
44+
45+
@OneToOne(mappedBy = QueryOneToOnePKIsNullTest_.Child_.PARENT,
46+
cascade = CascadeType.ALL)
47+
private Child child;
48+
49+
Parent() {}
50+
51+
public Parent(long id) {
52+
this.id = id;
53+
}
54+
55+
public long getId() {
56+
return id;
57+
}
58+
59+
public Child getChild() {
60+
return child;
61+
}
62+
63+
void setChild(Child child) {
64+
this.child = child;
65+
}
66+
67+
@Override
68+
public String toString() {
69+
return "Parent [id=" + id + ", child=" + child + "]";
70+
}
71+
}
72+
73+
74+
@Entity(name = "Child")
75+
static class Child {
76+
@OneToOne @Id
77+
private Parent parent;
78+
79+
Child() {}
80+
81+
public Child(Parent parent) {
82+
setParent(parent);
83+
}
84+
85+
public Parent getParent() {
86+
return parent;
87+
}
88+
89+
public void setParent(Parent parent) {
90+
this.parent = parent;
91+
parent.setChild(this);
92+
}
93+
94+
@Override
95+
public String toString() {
96+
return "Child [id=" + parent.getId() + "]";
97+
}
98+
}
99+
}

0 commit comments

Comments
 (0)