28
28
import org .junit .Test ;
29
29
30
30
import org .hibernate .Session ;
31
- import org .hibernate .test .orphan .one2one .fk .bidirectional .Employee ;
32
- import org .hibernate .test .orphan .one2one .fk .bidirectional .EmployeeInfo ;
33
- import org .hibernate .testing .FailureExpected ;
34
31
import org .hibernate .testing .TestForIssue ;
35
32
import org .hibernate .testing .junit4 .BaseCoreFunctionalTestCase ;
36
33
@@ -46,25 +43,31 @@ public class DeleteMultiLevelOrphansTest extends BaseCoreFunctionalTestCase {
46
43
47
44
private void createData () {
48
45
Preisregelung preisregelung = new Preisregelung ();
49
- preisregelung .setId ( 17960L );
50
46
51
47
Tranchenmodell tranchenmodell = new Tranchenmodell ();
52
- tranchenmodell .setId ( 1951L );
48
+
49
+ X x = new X ();
53
50
54
51
Tranche tranche1 = new Tranche ();
55
- tranche1 .setId ( 1951L );
52
+
53
+ Y y = new Y ();
56
54
57
55
Tranche tranche2 = new Tranche ();
58
- tranche2 .setId ( 1952L );
59
56
60
57
preisregelung .setTranchenmodell ( tranchenmodell );
61
58
tranchenmodell .setPreisregelung ( preisregelung );
62
59
60
+ tranchenmodell .setX ( x );
61
+ x .setTranchenmodell ( tranchenmodell );
62
+
63
63
tranchenmodell .getTranchen ().add ( tranche1 );
64
64
tranche1 .setTranchenmodell ( tranchenmodell );
65
65
tranchenmodell .getTranchen ().add ( tranche2 );
66
66
tranche2 .setTranchenmodell ( tranchenmodell );
67
67
68
+ tranche1 .setY ( y );
69
+ y .setTranche ( tranche1 );
70
+
68
71
Session session = openSession ();
69
72
session .beginTransaction ();
70
73
session .save ( preisregelung );
@@ -84,8 +87,7 @@ private void cleanupData() {
84
87
85
88
@ Test
86
89
@ TestForIssue ( jiraKey = "HHH-9091" )
87
- @ FailureExpected ( jiraKey = "HHH-9091" )
88
- public void testOrphanedWhileManaged () {
90
+ public void testDirectAssociationOrphanedWhileManaged () {
89
91
createData ();
90
92
91
93
Session session = openSession ();
@@ -95,7 +97,11 @@ public void testOrphanedWhileManaged() {
95
97
results = session .createQuery ( "from Preisregelung" ).list ();
96
98
assertEquals ( 1 , results .size () );
97
99
Preisregelung preisregelung = ( Preisregelung ) results .get ( 0 );
98
- assertNotNull ( preisregelung .getTranchenmodell () );
100
+ Tranchenmodell tranchenmodell = preisregelung .getTranchenmodell ();
101
+ assertNotNull ( tranchenmodell );
102
+ assertNotNull ( tranchenmodell .getX () );
103
+ assertEquals ( 2 , tranchenmodell .getTranchen ().size () );
104
+ assertNotNull ( tranchenmodell .getTranchen ().get ( 0 ).getY () );
99
105
preisregelung .setTranchenmodell ( null );
100
106
session .getTransaction ().commit ();
101
107
session .close ();
@@ -107,6 +113,13 @@ public void testOrphanedWhileManaged() {
107
113
assertNull ( preisregelung .getTranchenmodell () );
108
114
results = session .createQuery ( "from Tranchenmodell" ).list ();
109
115
assertEquals ( 0 , results .size () );
116
+ results = session .createQuery ( "from Tranche" ).list ();
117
+ assertEquals ( 0 , results .size () );
118
+ results = session .createQuery ( "from X" ).list ();
119
+ assertEquals ( 0 , results .size () );
120
+ results = session .createQuery ( "from Y" ).list ();
121
+ assertEquals ( 0 , results .size () );
122
+
110
123
results = session .createQuery ( "from Preisregelung" ).list ();
111
124
assertEquals ( 1 , results .size () );
112
125
@@ -115,11 +128,10 @@ public void testOrphanedWhileManaged() {
115
128
116
129
cleanupData ();
117
130
}
118
-
131
+
119
132
@ Test
120
133
@ TestForIssue ( jiraKey = "HHH-9091" )
121
- @ FailureExpected ( jiraKey = "HHH-9091" )
122
- public void testReplacedWhileManaged () {
134
+ public void testReplacedDirectAssociationWhileManaged () {
123
135
createData ();
124
136
125
137
Session session = openSession ();
@@ -129,11 +141,56 @@ public void testReplacedWhileManaged() {
129
141
results = session .createQuery ( "from Preisregelung" ).list ();
130
142
assertEquals ( 1 , results .size () );
131
143
Preisregelung preisregelung = ( Preisregelung ) results .get ( 0 );
132
- assertNotNull ( preisregelung .getTranchenmodell () );
144
+ Tranchenmodell tranchenmodell = preisregelung .getTranchenmodell ();
145
+ assertNotNull ( tranchenmodell );
146
+ assertNotNull ( tranchenmodell .getX () );
147
+ assertEquals ( 2 , tranchenmodell .getTranchen ().size () );
148
+ assertNotNull ( tranchenmodell .getTranchen ().get ( 0 ).getY () );
133
149
134
- // Replace with a new Tranchenmodell instance
150
+ // Create a new Tranchenmodell with new direct and nested associations
135
151
Tranchenmodell tranchenmodellNew = new Tranchenmodell ();
136
- tranchenmodellNew .setId ( 1952L );
152
+ X xNew = new X ();
153
+ tranchenmodellNew .setX ( xNew );
154
+ xNew .setTranchenmodell ( tranchenmodellNew );
155
+ Tranche trancheNew = new Tranche ();
156
+ tranchenmodellNew .getTranchen ().add ( trancheNew );
157
+ trancheNew .setTranchenmodell ( tranchenmodellNew );
158
+ Y yNew = new Y ();
159
+ trancheNew .setY ( yNew );
160
+ yNew .setTranche ( trancheNew );
161
+
162
+ // Replace with a new Tranchenmodell instance containing new direct and nested associations
163
+ preisregelung .setTranchenmodell (tranchenmodellNew );
164
+ tranchenmodellNew .setPreisregelung ( preisregelung );
165
+
166
+ session .getTransaction ().commit ();
167
+ session .close ();
168
+
169
+ session = openSession ();
170
+ session .getTransaction ().begin ();
171
+
172
+ results = session .createQuery ( "from Tranche" ).list ();
173
+ assertEquals ( 1 , results .size () );
174
+ results = session .createQuery ( "from Tranchenmodell" ).list ();
175
+ assertEquals ( 1 , results .size () );
176
+ results = session .createQuery ( "from X" ).list ();
177
+ assertEquals ( 1 , results .size () );
178
+ results = session .createQuery ( "from Y" ).list ();
179
+ assertEquals ( 1 , results .size () );
180
+ results = session .createQuery ( "from Preisregelung" ).list ();
181
+ assertEquals ( 1 , results .size () );
182
+ preisregelung = ( Preisregelung ) results .get ( 0 );
183
+ tranchenmodell = preisregelung .getTranchenmodell ();
184
+ assertNotNull ( tranchenmodell );
185
+ assertEquals ( tranchenmodellNew .getId (), tranchenmodell .getId () );
186
+ assertNotNull ( tranchenmodell .getX () );
187
+ assertEquals ( xNew .getId (), tranchenmodell .getX ().getId () );
188
+ assertEquals ( 1 , tranchenmodell .getTranchen ().size () );
189
+ assertEquals ( trancheNew .getId (), tranchenmodell .getTranchen ().get ( 0 ).getId () );
190
+ assertEquals ( yNew .getId (), tranchenmodell .getTranchen ().get ( 0 ).getY ().getId () );
191
+
192
+ // Replace with a new Tranchenmodell instance with no associations
193
+ tranchenmodellNew = new Tranchenmodell ();
137
194
preisregelung .setTranchenmodell (tranchenmodellNew );
138
195
tranchenmodellNew .setPreisregelung ( preisregelung );
139
196
session .getTransaction ().commit ();
@@ -143,14 +200,63 @@ public void testReplacedWhileManaged() {
143
200
session .beginTransaction ();
144
201
results = session .createQuery ( "from Tranchenmodell" ).list ();
145
202
assertEquals ( 1 , results .size () );
146
- Tranchenmodell tranchenmodellQueried = (Tranchenmodell ) results .get ( 0 );
147
- assertEquals ( tranchenmodellNew .getId (), tranchenmodellQueried .getId () );
203
+ tranchenmodell = (Tranchenmodell ) results .get ( 0 );
204
+ assertEquals ( tranchenmodellNew .getId (), tranchenmodell .getId () );
148
205
results = session .createQuery ( "from Preisregelung" ).list ();
149
206
assertEquals ( 1 , results .size () );
150
- Preisregelung preisregelung1Queried = (Preisregelung ) results .get ( 0 );
151
- assertEquals ( tranchenmodellQueried , preisregelung1Queried .getTranchenmodell () );
207
+ preisregelung = (Preisregelung ) results .get ( 0 );
208
+ assertEquals ( tranchenmodell , preisregelung .getTranchenmodell () );
152
209
results = session .createQuery ( "from Tranche" ).list ();
153
210
assertEquals ( 0 , results .size () );
211
+ results = session .createQuery ( "from X" ).list ();
212
+ assertEquals ( 0 , results .size () );
213
+ results = session .createQuery ( "from Y" ).list ();
214
+ assertEquals ( 0 , results .size () );
215
+ session .getTransaction ().commit ();
216
+ session .close ();
217
+
218
+ cleanupData ();
219
+ }
220
+
221
+ @ Test
222
+ @ TestForIssue ( jiraKey = "HHH-9091" )
223
+ public void testDirectAndNestedAssociationsOrphanedWhileManaged () {
224
+ createData ();
225
+
226
+ Session session = openSession ();
227
+ session .beginTransaction ();
228
+ List results = session .createQuery ( "from Tranchenmodell" ).list ();
229
+ assertEquals ( 1 , results .size () );
230
+ results = session .createQuery ( "from Preisregelung" ).list ();
231
+ assertEquals ( 1 , results .size () );
232
+ Preisregelung preisregelung = ( Preisregelung ) results .get ( 0 );
233
+ Tranchenmodell tranchenmodell = preisregelung .getTranchenmodell ();
234
+ assertNotNull ( tranchenmodell );
235
+ assertNotNull ( tranchenmodell .getX () );
236
+ assertEquals ( 2 , tranchenmodell .getTranchen ().size () );
237
+ assertNotNull ( tranchenmodell .getTranchen ().get ( 0 ).getY () );
238
+ preisregelung .setTranchenmodell ( null );
239
+ tranchenmodell .setX ( null );
240
+ tranchenmodell .getTranchen ().get ( 0 ).setY ( null );
241
+ session .getTransaction ().commit ();
242
+ session .close ();
243
+
244
+ session = openSession ();
245
+ session .beginTransaction ();
246
+
247
+ preisregelung = ( Preisregelung ) session .get ( Preisregelung .class , preisregelung .getId () );
248
+ assertNull ( preisregelung .getTranchenmodell () );
249
+ results = session .createQuery ( "from Tranchenmodell" ).list ();
250
+ assertEquals ( 0 , results .size () );
251
+ results = session .createQuery ( "from Tranche" ).list ();
252
+ assertEquals ( 0 , results .size () );
253
+ results = session .createQuery ( "from X" ).list ();
254
+ assertEquals ( 0 , results .size () );
255
+ results = session .createQuery ( "from Y" ).list ();
256
+ assertEquals ( 0 , results .size () );
257
+
258
+ results = session .createQuery ( "from Preisregelung" ).list ();
259
+ assertEquals ( 1 , results .size () );
154
260
155
261
session .getTransaction ().commit ();
156
262
session .close ();
@@ -163,7 +269,9 @@ protected Class<?>[] getAnnotatedClasses() {
163
269
return new Class []{
164
270
Preisregelung .class ,
165
271
Tranche .class ,
166
- Tranchenmodell .class
272
+ Tranchenmodell .class ,
273
+ X .class ,
274
+ Y .class
167
275
};
168
276
}
169
277
0 commit comments