Skip to content

Commit 8d9ce0d

Browse files
committed
HHH-19739 Testcase for duplicate unowned one-to-one attribute
1 parent 5f2857f commit 8d9ce0d

File tree

1 file changed

+132
-0
lines changed

1 file changed

+132
-0
lines changed
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.inheritance;
6+
7+
import jakarta.persistence.CascadeType;
8+
import jakarta.persistence.Column;
9+
import jakarta.persistence.Embeddable;
10+
import jakarta.persistence.EmbeddedId;
11+
import jakarta.persistence.Entity;
12+
import jakarta.persistence.FetchType;
13+
import jakarta.persistence.Inheritance;
14+
import jakarta.persistence.InheritanceType;
15+
import jakarta.persistence.JoinColumn;
16+
import jakarta.persistence.MappedSuperclass;
17+
import jakarta.persistence.OneToMany;
18+
import jakarta.persistence.OneToOne;
19+
20+
import org.hibernate.annotations.NotFound;
21+
import org.hibernate.annotations.NotFoundAction;
22+
23+
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
24+
import org.junit.Test;
25+
26+
import java.io.Serializable;
27+
import java.util.List;
28+
29+
import static org.junit.jupiter.api.Assertions.assertNotNull;
30+
31+
public class MultipleInheritanceTest extends BaseCoreFunctionalTestCase {
32+
33+
@Override
34+
protected Class<?>[] getAnnotatedClasses() {
35+
return new Class<?>[] {
36+
CarOptional.class,
37+
CarPart.class,
38+
BasicCar.class,
39+
SuperCar.class,
40+
Car.class
41+
};
42+
}
43+
44+
@Test
45+
public void test() {
46+
inTransaction( session -> {
47+
48+
Car car = new Car();
49+
CarPart carPart = new CarPart();
50+
51+
52+
CarPK id = new CarPK();
53+
id.carId1 = "1";
54+
carPart.id = id;
55+
session.persist( carPart );
56+
57+
car.id = id;
58+
car.parts = carPart;
59+
((BasicCar) car).parts = carPart;
60+
session.persist( car );
61+
session.flush();
62+
session.clear();
63+
64+
Car loadedCar = session.find( Car.class, id );
65+
assertNotNull( loadedCar.parts );
66+
} );
67+
}
68+
69+
@Embeddable
70+
public static class CarPK implements Serializable {
71+
@Column(name = "CAR_ID_1")
72+
protected String carId1;
73+
}
74+
75+
@Entity(name = "BasicCar")
76+
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
77+
public static class BasicCar {
78+
@EmbeddedId
79+
protected CarPK id;
80+
81+
@OneToOne
82+
@JoinColumn(name = "CAR_ID_1", referencedColumnName = "CAR_ID_1", insertable = false, updatable = false)
83+
CarPart parts;
84+
}
85+
86+
@Entity(name = "SuperCar")
87+
public static class SuperCar extends BasicCar {
88+
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
89+
// @JoinColumn(name = "CAR_ID_1", referencedColumnName = "CAR_ID_1")
90+
private List<CarOptional> optionals;
91+
}
92+
93+
@MappedSuperclass
94+
public static abstract class AbstractCar extends BasicCar {
95+
@OneToOne
96+
@NotFound(action = NotFoundAction.IGNORE)
97+
@JoinColumn(name = "CAR_ID_1", referencedColumnName = "CAR_ID_1", insertable = false, updatable = false)
98+
CarPart parts ;
99+
}
100+
101+
@Entity(name = "CarPart")
102+
public static class CarPart {
103+
@EmbeddedId
104+
private CarPK id;
105+
106+
String name;
107+
}
108+
109+
@Entity(name = "Car")
110+
public static class Car extends AbstractCar {
111+
112+
}
113+
114+
115+
116+
@Entity(name = "CarOptional")
117+
public static class CarOptional {
118+
119+
@EmbeddedId
120+
private CarOptionalPK id;
121+
122+
private String name;
123+
124+
@Embeddable
125+
public class CarOptionalPK implements Serializable {
126+
127+
@Column(name = "OPTIONAL_ID1")
128+
private String id1;
129+
130+
}
131+
}
132+
}

0 commit comments

Comments
 (0)