Skip to content

Commit 5a83fb1

Browse files
committed
[#1904] Add test for PropertyAccessException when creating a new object with a one-to-one association
1 parent c63b6a8 commit 5a83fb1

File tree

1 file changed

+153
-0
lines changed

1 file changed

+153
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
/* Hibernate, Relational Persistence for Idiomatic Java
2+
*
3+
* SPDX-License-Identifier: Apache-2.0
4+
* Copyright: Red Hat Inc. and Hibernate Authors
5+
*/
6+
package org.hibernate.reactive;
7+
8+
import java.util.Collection;
9+
import java.util.List;
10+
import java.util.Objects;
11+
12+
import org.junit.jupiter.api.Test;
13+
14+
import io.vertx.junit5.Timeout;
15+
import io.vertx.junit5.VertxTestContext;
16+
import jakarta.persistence.CascadeType;
17+
import jakarta.persistence.Column;
18+
import jakarta.persistence.Entity;
19+
import jakarta.persistence.FetchType;
20+
import jakarta.persistence.GeneratedValue;
21+
import jakarta.persistence.GenerationType;
22+
import jakarta.persistence.Id;
23+
import jakarta.persistence.MapsId;
24+
import jakarta.persistence.OneToOne;
25+
26+
import static java.util.concurrent.TimeUnit.MINUTES;
27+
import static org.assertj.core.api.Assertions.assertThat;
28+
29+
@Timeout(value = 10, timeUnit = MINUTES)
30+
public class OneToOneGeneratedIdWithMapsIdTest extends BaseReactiveTest {
31+
32+
@Override
33+
protected Collection<Class<?>> annotatedEntities() {
34+
return List.of( Person.class, NaturalPerson.class );
35+
}
36+
37+
@Test
38+
public void testPersist(VertxTestContext context) {
39+
NaturalPerson naturalPerson = new NaturalPerson( "natual" );
40+
Person person = new Person( "person", naturalPerson );
41+
42+
test(
43+
context, getMutinySessionFactory()
44+
.withTransaction( session -> session.persist( person ) )
45+
.chain( () -> getMutinySessionFactory()
46+
.withTransaction( session -> session
47+
.find( Person.class, person.getId() )
48+
.invoke( result -> {
49+
assertThat( result ).isNotNull();
50+
assertThat( result.getNaturalPerson() ).isNotNull();
51+
assertThat( result.getNaturalPerson().getId() ).isEqualTo( result.getId() );
52+
} ) )
53+
)
54+
);
55+
}
56+
57+
@Entity
58+
public static class Person {
59+
60+
@Id
61+
@GeneratedValue(strategy = GenerationType.IDENTITY)
62+
private Long id;
63+
64+
private String name;
65+
66+
@OneToOne(mappedBy = "person", cascade = CascadeType.ALL)
67+
private NaturalPerson naturalPerson;
68+
69+
public Person() {
70+
}
71+
72+
public Person(String name, NaturalPerson naturalPerson) {
73+
this.name = name;
74+
this.naturalPerson = naturalPerson;
75+
naturalPerson.person = this;
76+
}
77+
78+
public Long getId() {
79+
return id;
80+
}
81+
82+
public String getName() {
83+
return name;
84+
}
85+
86+
public NaturalPerson getNaturalPerson() {
87+
return naturalPerson;
88+
}
89+
90+
@Override
91+
public boolean equals(Object o) {
92+
if ( o == null || getClass() != o.getClass() ) {
93+
return false;
94+
}
95+
Person person = (Person) o;
96+
return Objects.equals( name, person.name );
97+
}
98+
99+
@Override
100+
public int hashCode() {
101+
return Objects.hashCode( name );
102+
}
103+
}
104+
105+
@Entity
106+
public static class NaturalPerson {
107+
108+
@Id
109+
private Long id;
110+
111+
@Column
112+
private String name;
113+
114+
@OneToOne(fetch = FetchType.LAZY)
115+
@MapsId
116+
private Person person;
117+
118+
public NaturalPerson() {
119+
}
120+
121+
public NaturalPerson(String name) {
122+
this.name = name;
123+
}
124+
125+
public Long getId() {
126+
return id;
127+
}
128+
129+
public String getName() {
130+
return name;
131+
}
132+
133+
public Person getPerson() {
134+
return person;
135+
}
136+
137+
@Override
138+
public boolean equals(Object o) {
139+
if ( o == null || getClass() != o.getClass() ) {
140+
return false;
141+
}
142+
NaturalPerson that = (NaturalPerson) o;
143+
return Objects.equals( name, that.name );
144+
}
145+
146+
@Override
147+
public int hashCode() {
148+
return Objects.hashCode( name );
149+
}
150+
}
151+
152+
153+
}

0 commit comments

Comments
 (0)