11
11
12
12
import org .hibernate .annotations .Instantiator ;
13
13
import org .hibernate .annotations .Struct ;
14
- import org .hibernate .boot .registry .StandardServiceRegistry ;
15
- import org .hibernate .boot .registry .StandardServiceRegistryBuilder ;
16
- import org .hibernate .cfg .AvailableSettings ;
17
14
import org .hibernate .dialect .OracleDialect ;
18
15
import org .hibernate .dialect .PostgreSQLDialect ;
19
- import org .hibernate .engine .jdbc .connections .internal .DriverManagerConnectionProviderImpl ;
20
16
21
- import org .hibernate .testing .orm .junit .BaseSessionFactoryFunctionalTest ;
17
+ import org .hibernate .testing .jdbc .SharedDriverManagerTypeCacheClearingIntegrator ;
18
+ import org .hibernate .testing .orm .junit .BootstrapServiceRegistry ;
19
+ import org .hibernate .testing .orm .junit .DomainModel ;
22
20
import org .hibernate .testing .orm .junit .RequiresDialect ;
21
+ import org .hibernate .testing .orm .junit .SessionFactory ;
22
+ import org .hibernate .testing .orm .junit .SessionFactoryScope ;
23
23
import org .junit .jupiter .api .AfterEach ;
24
24
import org .junit .jupiter .api .BeforeEach ;
25
25
import org .junit .jupiter .api .Test ;
33
33
import static org .junit .jupiter .api .Assertions .assertInstanceOf ;
34
34
import static org .junit .jupiter .api .Assertions .assertNull ;
35
35
36
- @ RequiresDialect ( PostgreSQLDialect .class )
37
- @ RequiresDialect ( OracleDialect .class )
38
- public class StructComponentInstantiatorTest extends BaseSessionFactoryFunctionalTest {
39
-
40
- @ Override
41
- protected Class <?>[] getAnnotatedClasses () {
42
- return new Class <?>[] {
43
- RecordStructHolder .class
44
- };
45
- }
46
-
47
- @ Override
48
- public StandardServiceRegistry produceServiceRegistry (StandardServiceRegistryBuilder ssrBuilder ) {
49
- // Make sure this stuff runs on a dedicated connection pool,
50
- // otherwise we might run into ORA-21700: object does not exist or is marked for delete
51
- // because the JDBC connection or database session caches something that should have been invalidated
52
- ssrBuilder .applySetting ( AvailableSettings .CONNECTION_PROVIDER , DriverManagerConnectionProviderImpl .class .getName () );
53
- return super .produceServiceRegistry ( ssrBuilder );
54
- }
36
+ @ BootstrapServiceRegistry (
37
+ // Clear the type cache, otherwise we might run into ORA-21700: object does not exist or is marked for delete
38
+ integrators = SharedDriverManagerTypeCacheClearingIntegrator .class
39
+ )
40
+ @ DomainModel (annotatedClasses = StructComponentInstantiatorTest .RecordStructHolder .class )
41
+ @ SessionFactory
42
+ @ RequiresDialect (PostgreSQLDialect .class )
43
+ @ RequiresDialect (OracleDialect .class )
44
+ public class StructComponentInstantiatorTest {
55
45
56
46
@ BeforeEach
57
- public void setUp () {
58
- inTransaction (
59
- session -> {
60
- session .persist ( new RecordStructHolder ( 1L , Point .createAggregate1 () ) );
61
- session .persist ( new RecordStructHolder ( 2L , Point .createAggregate2 () ) );
62
- }
63
- );
47
+ public void setUp (SessionFactoryScope scope ) {
48
+ scope .inTransaction ( session -> {
49
+ session .persist ( new RecordStructHolder ( 1L , Point .createAggregate1 () ) );
50
+ session .persist ( new RecordStructHolder ( 2L , Point .createAggregate2 () ) );
51
+ } );
64
52
}
65
53
66
54
@ AfterEach
67
- protected void cleanupTest () {
68
- inTransaction (
69
- session -> {
70
- session .createQuery ( "delete from RecordStructHolder h" ).executeUpdate ();
71
- }
72
- );
55
+ protected void cleanupTest (SessionFactoryScope scope ) {
56
+ scope .inTransaction ( session -> {
57
+ session .createQuery ( "delete from RecordStructHolder h" ).executeUpdate ();
58
+ } );
73
59
}
74
60
75
61
@ Test
76
- public void testUpdate () {
77
- sessionFactoryScope ().inTransaction (
78
- entityManager -> {
79
- RecordStructHolder RecordStructHolder = entityManager .find ( RecordStructHolder .class , 1L );
80
- RecordStructHolder .setThePoint ( Point .createAggregate2 () );
81
- entityManager .flush ();
82
- entityManager .clear ();
83
- assertStructEquals ( Point .createAggregate2 (), entityManager .find ( RecordStructHolder .class , 1L ).getThePoint () );
84
- }
85
- );
62
+ public void testUpdate (SessionFactoryScope scope ) {
63
+ scope .inTransaction ( entityManager -> {
64
+ RecordStructHolder RecordStructHolder = entityManager .find ( RecordStructHolder .class , 1L );
65
+ RecordStructHolder .setThePoint ( Point .createAggregate2 () );
66
+ entityManager .flush ();
67
+ entityManager .clear ();
68
+ assertStructEquals (
69
+ Point .createAggregate2 (),
70
+ entityManager .find ( RecordStructHolder .class , 1L ).getThePoint ()
71
+ );
72
+ } );
86
73
}
87
74
88
75
@ Test
89
- public void testFetch () {
90
- sessionFactoryScope ().inSession (
91
- entityManager -> {
92
- List <RecordStructHolder > RecordStructHolders = entityManager .createQuery ( "from RecordStructHolder b where b.id = 1" , RecordStructHolder .class ).getResultList ();
93
- assertEquals ( 1 , RecordStructHolders .size () );
94
- assertEquals ( 1L , RecordStructHolders .get ( 0 ).getId () );
95
- assertStructEquals ( Point .createAggregate1 (), RecordStructHolders .get ( 0 ).getThePoint () );
96
- }
97
- );
76
+ public void testFetch (SessionFactoryScope scope ) {
77
+ scope .inTransaction ( entityManager -> {
78
+ List <RecordStructHolder > RecordStructHolders = entityManager .createQuery (
79
+ "from RecordStructHolder b where b.id = 1" ,
80
+ RecordStructHolder .class
81
+ ).getResultList ();
82
+ assertEquals ( 1 , RecordStructHolders .size () );
83
+ assertEquals ( 1L , RecordStructHolders .get ( 0 ).getId () );
84
+ assertStructEquals ( Point .createAggregate1 (), RecordStructHolders .get ( 0 ).getThePoint () );
85
+ } );
98
86
}
99
87
100
88
@ Test
101
- public void testFetchNull () {
102
- sessionFactoryScope ().inSession (
103
- entityManager -> {
104
- List <RecordStructHolder > RecordStructHolders = entityManager .createQuery ( "from RecordStructHolder b where b.id = 2" , RecordStructHolder .class ).getResultList ();
105
- assertEquals ( 1 , RecordStructHolders .size () );
106
- assertEquals ( 2L , RecordStructHolders .get ( 0 ).getId () );
107
- assertStructEquals ( Point .createAggregate2 (), RecordStructHolders .get ( 0 ).getThePoint () );
108
- }
109
- );
89
+ public void testFetchNull (SessionFactoryScope scope ) {
90
+ scope .inTransaction ( entityManager -> {
91
+ List <RecordStructHolder > RecordStructHolders = entityManager .createQuery (
92
+ "from RecordStructHolder b where b.id = 2" ,
93
+ RecordStructHolder .class
94
+ ).getResultList ();
95
+ assertEquals ( 1 , RecordStructHolders .size () );
96
+ assertEquals ( 2L , RecordStructHolders .get ( 0 ).getId () );
97
+ assertStructEquals ( Point .createAggregate2 (), RecordStructHolders .get ( 0 ).getThePoint () );
98
+ } );
110
99
}
111
100
112
101
@ Test
113
- public void testDomainResult () {
114
- sessionFactoryScope ().inSession (
115
- entityManager -> {
116
- List <Point > structs = entityManager .createQuery ( "select b.thePoint from RecordStructHolder b where b.id = 1" , Point .class ).getResultList ();
117
- assertEquals ( 1 , structs .size () );
118
- assertStructEquals ( Point .createAggregate1 (), structs .get ( 0 ) );
119
- }
120
- );
102
+ public void testDomainResult (SessionFactoryScope scope ) {
103
+ scope .inTransaction ( entityManager -> {
104
+ List <Point > structs = entityManager .createQuery (
105
+ "select b.thePoint from RecordStructHolder b where b.id = 1" ,
106
+ Point .class
107
+ ).getResultList ();
108
+ assertEquals ( 1 , structs .size () );
109
+ assertStructEquals ( Point .createAggregate1 (), structs .get ( 0 ) );
110
+ } );
121
111
}
122
112
123
113
@ Test
124
- public void testSelectionItems () {
125
- sessionFactoryScope ().inSession (
126
- entityManager -> {
127
- List <Tuple > tuples = entityManager .createQuery (
128
- "select " +
129
- "b.thePoint.x," +
130
- "b.thePoint.y," +
131
- "b.thePoint.z " +
132
- "from RecordStructHolder b where b.id = 1" ,
133
- Tuple .class
134
- ).getResultList ();
135
- assertEquals ( 1 , tuples .size () );
136
- final Tuple tuple = tuples .get ( 0 );
137
- assertStructEquals (
138
- Point .createAggregate1 (),
139
- new Point (
140
- tuple .get ( 1 , String .class ),
141
- tuple .get ( 2 , long .class ),
142
- tuple .get ( 0 , int .class )
143
- )
144
- );
145
- }
146
- );
114
+ public void testSelectionItems (SessionFactoryScope scope ) {
115
+ scope .inTransaction ( entityManager -> {
116
+ List <Tuple > tuples = entityManager .createQuery (
117
+ "select " +
118
+ "b.thePoint.x," +
119
+ "b.thePoint.y," +
120
+ "b.thePoint.z " +
121
+ "from RecordStructHolder b where b.id = 1" ,
122
+ Tuple .class
123
+ ).getResultList ();
124
+ assertEquals ( 1 , tuples .size () );
125
+ final Tuple tuple = tuples .get ( 0 );
126
+ assertStructEquals (
127
+ Point .createAggregate1 (),
128
+ new Point (
129
+ tuple .get ( 1 , String .class ),
130
+ tuple .get ( 2 , long .class ),
131
+ tuple .get ( 0 , int .class )
132
+ )
133
+ );
134
+ } );
147
135
}
148
136
149
137
@ Test
150
- public void testDeleteWhere () {
151
- sessionFactoryScope ().inTransaction (
152
- entityManager -> {
153
- entityManager .createQuery ( "delete RecordStructHolder b where b.thePoint is not null" ).executeUpdate ();
154
- assertNull ( entityManager .find ( RecordStructHolder .class , 1L ) );
155
- }
156
- );
138
+ public void testDeleteWhere (SessionFactoryScope scope ) {
139
+ scope .inTransaction ( entityManager -> {
140
+ entityManager .createQuery ( "delete RecordStructHolder b where b.thePoint is not null" ).executeUpdate ();
141
+ assertNull ( entityManager .find ( RecordStructHolder .class , 1L ) );
142
+ } );
157
143
}
158
144
159
145
@ Test
160
- public void testUpdateAggregate () {
161
- sessionFactoryScope ().inTransaction (
162
- entityManager -> {
163
- entityManager .createQuery ( "update RecordStructHolder b set b.thePoint = null" ).executeUpdate ();
164
- assertNull ( entityManager .find ( RecordStructHolder .class , 1L ).getThePoint () );
165
- }
166
- );
146
+ public void testUpdateAggregate (SessionFactoryScope scope ) {
147
+ scope .inTransaction ( entityManager -> {
148
+ entityManager .createQuery ( "update RecordStructHolder b set b.thePoint = null" ).executeUpdate ();
149
+ assertNull ( entityManager .find ( RecordStructHolder .class , 1L ).getThePoint () );
150
+ } );
167
151
}
168
152
169
153
@ Test
170
- public void testUpdateAggregateMember () {
171
- sessionFactoryScope ().inTransaction (
172
- entityManager -> {
173
- entityManager .createQuery ( "update RecordStructHolder b set b.thePoint.x = null" ).executeUpdate ();
174
- Point struct = Point .createAggregate1 ().withX ( null );
175
- assertStructEquals ( struct , entityManager .find ( RecordStructHolder .class , 1L ).getThePoint () );
176
- }
177
- );
154
+ public void testUpdateAggregateMember (SessionFactoryScope scope ) {
155
+ scope .inTransaction ( entityManager -> {
156
+ entityManager .createQuery ( "update RecordStructHolder b set b.thePoint.x = null" ).executeUpdate ();
157
+ Point struct = Point .createAggregate1 ().withX ( null );
158
+ assertStructEquals ( struct , entityManager .find ( RecordStructHolder .class , 1L ).getThePoint () );
159
+ } );
178
160
}
179
161
180
162
@ Test
181
- public void testUpdateMultipleAggregateMembers () {
182
- sessionFactoryScope ().inTransaction (
183
- entityManager -> {
184
- entityManager .createQuery ( "update RecordStructHolder b set b.thePoint.y = null, b.thePoint.z = 0" ).executeUpdate ();
185
- Point struct = Point .createAggregate1 ().withY ( null ).withZ ( 0 );
186
- assertStructEquals ( struct , entityManager .find ( RecordStructHolder .class , 1L ).getThePoint () );
187
- }
188
- );
163
+ public void testUpdateMultipleAggregateMembers (SessionFactoryScope scope ) {
164
+ scope .inTransaction ( entityManager -> {
165
+ entityManager .createQuery ( "update RecordStructHolder b set b.thePoint.y = null, b.thePoint.z = 0" )
166
+ .executeUpdate ();
167
+ Point struct = Point .createAggregate1 ().withY ( null ).withZ ( 0 );
168
+ assertStructEquals ( struct , entityManager .find ( RecordStructHolder .class , 1L ).getThePoint () );
169
+ } );
189
170
}
190
171
191
172
@ Test
192
- public void testUpdateAllAggregateMembers () {
193
- sessionFactoryScope ().inTransaction (
194
- entityManager -> {
195
- Point struct = Point .createAggregate1 ();
196
- entityManager .createQuery (
173
+ public void testUpdateAllAggregateMembers (SessionFactoryScope scope ) {
174
+ scope .inTransaction ( entityManager -> {
175
+ Point struct = Point .createAggregate1 ();
176
+ entityManager .createQuery (
197
177
"update RecordStructHolder b set " +
198
178
"b.thePoint.x = :x," +
199
179
"b.thePoint.y = :y," +
200
180
"b.thePoint.z = :z " +
201
181
"where b.id = 2"
202
182
)
203
- .setParameter ( "x" , struct .getX () )
204
- .setParameter ( "y" , struct .getY () )
205
- .setParameter ( "z" , struct .getZ () )
206
- .executeUpdate ();
207
- assertStructEquals ( Point .createAggregate1 (), entityManager .find ( RecordStructHolder .class , 2L ).getThePoint () );
208
- }
209
- );
183
+ .setParameter ( "x" , struct .getX () )
184
+ .setParameter ( "y" , struct .getY () )
185
+ .setParameter ( "z" , struct .getZ () )
186
+ .executeUpdate ();
187
+ assertStructEquals (
188
+ Point .createAggregate1 (),
189
+ entityManager .find ( RecordStructHolder .class , 2L ).getThePoint ()
190
+ );
191
+ } );
210
192
}
211
193
212
194
@ Test
213
- public void testNativeQuery () {
214
- sessionFactoryScope ().inTransaction (
215
- entityManager -> {
216
- //noinspection unchecked
217
- List <Object > resultList = entityManager .createNativeQuery (
218
- "select b.thePoint from RecordStructHolder b where b.id = 1" ,
219
- Object .class
220
- )
221
- .getResultList ();
222
- assertEquals ( 1 , resultList .size () );
223
- assertInstanceOf ( Point .class , resultList .get ( 0 ) );
224
- Point struct = (Point ) resultList .get ( 0 );
225
- assertStructEquals ( Point .createAggregate1 (), struct );
226
- }
227
- );
195
+ public void testNativeQuery (SessionFactoryScope scope ) {
196
+ scope .inTransaction ( entityManager -> {
197
+ //noinspection unchecked
198
+ List <Object > resultList = entityManager .createNativeQuery (
199
+ "select b.thePoint from RecordStructHolder b where b.id = 1" ,
200
+ Object .class
201
+ )
202
+ .getResultList ();
203
+ assertEquals ( 1 , resultList .size () );
204
+ assertInstanceOf ( Point .class , resultList .get ( 0 ) );
205
+ Point struct = (Point ) resultList .get ( 0 );
206
+ assertStructEquals ( Point .createAggregate1 (), struct );
207
+ } );
228
208
}
229
209
230
210
private void assertStructEquals (Point point1 , Point point2 ) {
@@ -274,7 +254,7 @@ public static class Point {
274
254
private final long z ;
275
255
private final Integer x ;
276
256
277
- @ Instantiator ({"y" ,"z" ,"x" })
257
+ @ Instantiator ({ "y" , "z" , "x" })
278
258
public Point (String y , long z , Integer x ) {
279
259
this .y = y ;
280
260
this .x = x ;
@@ -296,15 +276,19 @@ public long getZ() {
296
276
public Point withX (Integer x ) {
297
277
return new Point ( y , z , x );
298
278
}
279
+
299
280
public Point withY (String y ) {
300
281
return new Point ( y , z , x );
301
282
}
283
+
302
284
public Point withZ (long z ) {
303
285
return new Point ( y , z , x );
304
286
}
287
+
305
288
public static Point createAggregate1 () {
306
289
return new Point ( "1" , -100 , 10 );
307
290
}
291
+
308
292
public static Point createAggregate2 () {
309
293
return new Point ( "20" , -200 , 2 );
310
294
}
0 commit comments