Skip to content

Commit 9fc31c4

Browse files
committed
[hibernate#1077] Added test to verify new support for non-nullable associations
1 parent 3854aed commit 9fc31c4

File tree

1 file changed

+154
-0
lines changed

1 file changed

+154
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
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.ArrayList;
9+
import java.util.List;
10+
import javax.persistence.Entity;
11+
import javax.persistence.Id;
12+
import javax.persistence.JoinColumn;
13+
import javax.persistence.ManyToOne;
14+
import javax.persistence.OneToMany;
15+
import javax.persistence.Table;
16+
17+
import org.hibernate.cfg.Configuration;
18+
19+
import org.junit.After;
20+
import org.junit.Before;
21+
import org.junit.Test;
22+
23+
import io.vertx.ext.unit.TestContext;
24+
25+
public class NonNullableManyToOneTest extends BaseReactiveTest {
26+
27+
@Override
28+
protected Configuration constructConfiguration() {
29+
Configuration configuration = super.constructConfiguration();
30+
configuration.addAnnotatedClass( Dealer.class );
31+
configuration.addAnnotatedClass( Artist.class );
32+
configuration.addAnnotatedClass( Painting.class );
33+
return configuration;
34+
}
35+
36+
@Before
37+
public void populateDB(TestContext context) {
38+
Artist artist = new Artist( "Grand Master Painter" );
39+
artist.id = 1L;
40+
Dealer dealer = new Dealer( "Dealer" );
41+
dealer.id = 1L;
42+
Painting painting = new Painting( "Mona Lisa");
43+
painting.id = 2L;
44+
artist.addPainting( painting );
45+
dealer.addPainting( painting );
46+
47+
test( context, getMutinySessionFactory()
48+
.withTransaction( s -> s.persistAll( painting, artist, dealer ) ) );
49+
}
50+
51+
@After
52+
public void cleanDB(TestContext context) {
53+
test( context, deleteEntities( "Painting", "Artist" ) );
54+
}
55+
56+
@Test
57+
public void testNonNullableSuccess(TestContext context) {
58+
test(
59+
context,
60+
getMutinySessionFactory().withTransaction( session -> session
61+
.createQuery( "from Artist", Artist.class )
62+
.getSingleResult().chain( a -> session.fetch( a.paintings ) )
63+
.invoke( paintings -> {
64+
context.assertNotNull( paintings );
65+
context.assertEquals( 1, paintings.size() );
66+
context.assertEquals( "Mona Lisa", paintings.get( 0 ).name );
67+
} )
68+
.chain( () -> getMutinySessionFactory().withTransaction( s -> session
69+
.createQuery( "from Dealer", Dealer.class )
70+
.getSingleResult().chain( d -> session.fetch( d.paintings ) )
71+
.invoke( paintings -> {
72+
context.assertNotNull( paintings );
73+
context.assertEquals( 1, paintings.size() );
74+
context.assertEquals( "Mona Lisa", paintings.get( 0 ).name );
75+
} )
76+
)
77+
)
78+
)
79+
);
80+
}
81+
82+
@Entity(name = "Painting")
83+
@Table(name = "painting")
84+
public static class Painting {
85+
@Id
86+
Long id;
87+
String name;
88+
89+
@JoinColumn(nullable = false)
90+
@ManyToOne(optional = true)
91+
Artist author;
92+
93+
@JoinColumn(nullable = true)
94+
@ManyToOne(optional = false)
95+
Dealer dealer;
96+
97+
public Painting() {
98+
}
99+
100+
public Painting(String name) {
101+
this.name = name;
102+
}
103+
}
104+
105+
@Entity(name = "Artist")
106+
@Table(name = "artist")
107+
public static class Artist {
108+
109+
@Id
110+
Long id;
111+
String name;
112+
113+
@OneToMany(mappedBy = "author")
114+
List<Painting> paintings = new ArrayList<>();
115+
116+
public Artist() {
117+
}
118+
119+
public Artist(String name) {
120+
this.name = name;
121+
}
122+
123+
public void addPainting(Painting painting) {
124+
this.paintings.add( painting );
125+
painting.author = this;
126+
}
127+
128+
}
129+
130+
@Entity(name = "Dealer")
131+
@Table(name = "dealer")
132+
public static class Dealer {
133+
134+
@Id
135+
Long id;
136+
String name;
137+
138+
@OneToMany(mappedBy = "dealer")
139+
List<Painting> paintings = new ArrayList<>();
140+
141+
public Dealer() {
142+
}
143+
144+
public Dealer(String name) {
145+
this.name = name;
146+
}
147+
148+
public void addPainting(Painting painting) {
149+
this.paintings.add( painting );
150+
painting.dealer = this;
151+
}
152+
153+
}
154+
}

0 commit comments

Comments
 (0)