44 */
55package org .hibernate .orm .test .quote ;
66
7- import java .util .HashSet ;
8- import java .util .Set ;
97import jakarta .persistence .Column ;
108import jakarta .persistence .Entity ;
119import jakarta .persistence .FetchType ;
1715import jakarta .persistence .ManyToOne ;
1816import jakarta .persistence .OneToMany ;
1917import jakarta .persistence .Table ;
20-
21- import org .hibernate .Session ;
22-
18+ import org .hibernate .testing .orm .junit .DomainModel ;
2319import org .hibernate .testing .orm .junit .JiraKey ;
24- import org .hibernate .testing .junit4 .BaseNonConfigCoreFunctionalTestCase ;
25- import org .junit .Test ;
20+ import org .hibernate .testing .orm .junit .SessionFactory ;
21+ import org .hibernate .testing .orm .junit .SessionFactoryScope ;
22+ import org .junit .jupiter .api .AfterEach ;
23+ import org .junit .jupiter .api .Test ;
24+
25+ import java .util .HashSet ;
26+ import java .util .Set ;
2627
27- import static org .junit .Assert .assertEquals ;
28- import static org .junit .Assert .assertNotNull ;
28+ import static org .assertj .core .api .Assertions .assertThat ;
2929
3030/**
3131 * @author Emmanuel Bernard
3232 * @author Brett Meyer
3333 */
34- public class QuoteTest extends BaseNonConfigCoreFunctionalTestCase {
34+ @ DomainModel (
35+ annotatedClasses = {
36+ User .class ,
37+ Role .class ,
38+ Phone .class ,
39+ House .class ,
40+ QuoteTest .Container .class ,
41+ QuoteTest .SimpleItem .class
42+ }
43+ )
44+ @ SessionFactory
45+ public class QuoteTest {
46+
47+ @ AfterEach
48+ public void cleanup (SessionFactoryScope scope ) {
49+ scope .getSessionFactory ().getSchemaManager ().truncateMappedObjects ();
50+ }
3551
3652 @ Test
37- public void testQuoteManytoMany () {
53+ public void testQuoteManytoMany (SessionFactoryScope scope ) {
3854 String role = User .class .getName () + ".roles" ;
39- assertEquals ( "User_Role" , metadata ().getCollectionBinding ( role ).getCollectionTable ().getName () );
4055
41- Session s = openSession ();
42- s .beginTransaction ();
43- User u = new User ();
44- s .persist ( u );
45- Role r = new Role ();
46- s .persist ( r );
47- u .getRoles ().add ( r );
48- s .flush ();
49- s .clear ();
50- u = s .get ( User .class , u .getId () );
51- assertEquals ( 1 , u .getRoles ().size () );
52- s .getTransaction ().rollback ();
53- s .close ();
56+ assertThat (
57+ scope .getMetadataImplementor ().getCollectionBinding ( role ).getCollectionTable ().getName () ).isEqualTo (
58+ "User_Role" );
59+
60+ scope .inTransaction (
61+ session -> {
62+ User u = new User ();
63+ session .persist ( u );
64+ Role r = new Role ();
65+ session .persist ( r );
66+ u .getRoles ().add ( r );
67+ session .flush ();
68+ session .clear ();
69+ u = session .get ( User .class , u .getId () );
70+ assertThat ( u .getRoles () ).hasSize ( 1 );
71+ }
72+ );
5473 }
5574
5675 @ Test
5776 @ JiraKey (value = "HHH-8464" )
58- public void testDoubleQuoteJoinColumn () {
59- Session s = openSession ();
60- s .getTransaction ().begin ();
61- User user = new User ();
62- House house = new House ();
63- user .setHouse ( house );
64- s .persist ( house );
65- s .persist ( user );
66- s .getTransaction ().commit ();
67- s .close ();
68-
69- s = openSession ();
70- s .getTransaction ().begin ();
71- user = s .get ( User .class , user .getId () );
72- assertNotNull ( user );
73- assertNotNull ( user .getHouse () );
74- // seems trivial, but if quoting normalization worked on the join column, these should all be the same
75- assertEquals ( user .getHouse ().getId (), user .getHouse1 () );
76- assertEquals ( user .getHouse ().getId (), user .getHouse2 () );
77- s .getTransaction ().commit ();
78- s .close ();
77+ public void testDoubleQuoteJoinColumn (SessionFactoryScope scope ) {
78+ User u = new User ();
79+ scope .inTransaction (
80+ session -> {
81+
82+ House house = new House ();
83+ u .setHouse ( house );
84+ session .persist ( house );
85+ session .persist ( u );
86+ }
87+ );
88+
89+ scope .inTransaction (
90+ session -> {
91+ User user = session .get ( User .class , u .getId () );
92+ assertThat ( user ).isNotNull ();
93+ assertThat ( user .getHouse () ).isNotNull ();
94+ // seems trivial, but if quoting normalization worked on the join column, these should all be the same
95+ assertThat ( user .getHouse1 () ).isEqualTo ( user .getHouse ().getId () );
96+ assertThat ( user .getHouse2 () ).isEqualTo ( user .getHouse ().getId () );
97+ }
98+ );
7999 }
80100
81101 @ Test
82102 @ JiraKey (value = "HHH-2988" )
83- public void testUnionSubclassEntityQuoting () {
84- Session s = openSession ();
85- s .beginTransaction ();
103+ public void testUnionSubclassEntityQuoting (SessionFactoryScope scope ) {
86104 Container container1 = new Container ();
87- Container container2 = new Container ();
88- SimpleItem simpleItem = new SimpleItem ();
89-
90- container1 .items .add ( container2 );
91- container1 .items .add ( simpleItem );
92- container2 .parent = container1 ;
93- simpleItem .parent = container1 ;
94-
95- s .persist ( simpleItem );
96- s .persist ( container2 );
97- s .persist ( container1 );
98- s .getTransaction ().commit ();
99- s .close ();
100-
101- s = openSession ();
102- s .beginTransaction ();
103- Container result = s .get ( Container .class , container1 .id );
104- assertNotNull ( result );
105- assertNotNull ( result .items );
106- assertEquals ( 2 , result .items .size () );
107- s .getTransaction ().commit ();
108- s .close ();
109-
110- s = openSession ();
111- s .beginTransaction ();
112- container1 = s .get ( Container .class , container1 .id );
113- for ( Item item : container1 .items ) {
114- item .parent = null ;
115- }
116- container1 .items .clear ();
117- s .flush ();
118- s .createQuery ( "delete Item" ).executeUpdate ();
119- s .getTransaction ().commit ();
120- s .close ();
121- }
122-
123- @ Override
124- protected Class [] getAnnotatedClasses () {
125- return new Class [] {
126- User .class ,
127- Role .class ,
128- Phone .class ,
129- House .class ,
130- Container .class ,
131- SimpleItem .class
132- };
105+ scope .inTransaction (
106+ session -> {
107+ Container container2 = new Container ();
108+ SimpleItem simpleItem = new SimpleItem ();
109+
110+ container1 .items .add ( container2 );
111+ container1 .items .add ( simpleItem );
112+ container2 .parent = container1 ;
113+ simpleItem .parent = container1 ;
114+
115+ session .persist ( simpleItem );
116+ session .persist ( container2 );
117+ session .persist ( container1 );
118+ }
119+ );
120+
121+ scope .inTransaction (
122+ session -> {
123+ Container result = session .get ( Container .class , container1 .id );
124+ assertThat ( result ).isNotNull ();
125+ assertThat ( result .items ).isNotNull ();
126+ assertThat ( result .items ).hasSize ( 2 );
127+ }
128+ );
129+
130+ scope .inTransaction (
131+ session -> {
132+ Container result = session .get ( Container .class , container1 .id );
133+ for ( Item item : result .items ) {
134+ item .parent = null ;
135+ }
136+ result .items .clear ();
137+ session .flush ();
138+ session .createMutationQuery ( "delete Item" ).executeUpdate ();
139+ }
140+ );
133141 }
134142
135- @ Entity ( name = "Item" )
143+ @ Entity (name = "Item" )
136144 @ Inheritance (strategy = InheritanceType .TABLE_PER_CLASS )
137- private static abstract class Item {
145+ static abstract class Item {
138146
139- @ Id @ GeneratedValue
147+ @ Id
148+ @ GeneratedValue
140149 @ Column (name = "`ID`" )
141150 protected long id ;
142151
@@ -150,14 +159,14 @@ private static abstract class Item {
150159
151160 @ Entity
152161 @ Table (name = "`CoNTaiNeR`" )
153- private static class Container extends Item {
162+ static class Container extends Item {
154163
155164 @ OneToMany (mappedBy = "parent" , targetEntity = Item .class )
156- private Set <Item > items = new HashSet <Item >( 0 );
165+ private Set <Item > items = new HashSet <>( 0 );
157166 }
158167
159168 @ Entity
160169 @ Table (name = "`SimpleItem`" )
161- private static class SimpleItem extends Item {
170+ static class SimpleItem extends Item {
162171 }
163172}
0 commit comments