1212import static org .junit .Assert .assertEquals ;
1313import static org .junit .Assert .assertNull ;
1414
15+ import org .hibernate .testing .TestForIssue ;
1516import org .hibernate .testing .bytecode .enhancement .BytecodeEnhancerRunner ;
1617import org .hibernate .testing .bytecode .enhancement .CustomEnhancementContext ;
1718import org .hibernate .testing .bytecode .enhancement .EnhancerTestContext ;
1819import org .hibernate .testing .junit4 .BaseCoreFunctionalTestCase ;
19- import org .junit .Before ;
2020import org .junit .Test ;
2121import org .junit .runner .RunWith ;
2222
2929
3030@ RunWith (BytecodeEnhancerRunner .class )
3131@ CustomEnhancementContext ( {EnhancerTestContext .class , NoDirtyCheckingContext .class } )
32- public class MultiLazyBasicUpdateTest extends BaseCoreFunctionalTestCase {
32+ @ TestForIssue (jiraKey = "HHH-15634" )
33+ public class EagerAndLazyBasicUpdateTest extends BaseCoreFunctionalTestCase {
3334
3435 private Long entityId ;
3536
@@ -38,100 +39,175 @@ public Class<?>[] getAnnotatedClasses() {
3839 return new Class <?>[] { LazyEntity .class };
3940 }
4041
41- @ Before
42- public void prepare () {
42+ private void initNull () {
4343 doInHibernate ( this ::sessionFactory , s -> {
4444 LazyEntity entity = new LazyEntity ();
4545 s .persist ( entity );
4646 entityId = entity .getId ();
4747 } );
4848 }
4949
50+ private void initNonNull () {
51+ doInHibernate ( this ::sessionFactory , s -> {
52+ LazyEntity entity = new LazyEntity ();
53+ entity .setEagerProperty ( "eager_initial" );
54+ entity .setLazyProperty1 ( "lazy1_initial" );
55+ entity .setLazyProperty2 ( "lazy2_initial" );
56+ s .persist ( entity );
57+ entityId = entity .getId ();
58+ } );
59+ }
60+
5061 @ Test
51- public void updateOneLazyProperty () {
52- // null -> non-null
62+ public void updateOneLazyProperty_nullToNonNull () {
63+ initNull ();
5364 doInHibernate ( this ::sessionFactory , s -> {
5465 LazyEntity entity = s .get ( LazyEntity .class , entityId );
55- entity .setLazyProperty1 ( "update1 " );
66+ entity .setLazyProperty1 ( "lazy1_update " );
5667 } );
5768 doInHibernate ( this ::sessionFactory , s -> {
5869 LazyEntity entity = s .get ( LazyEntity .class , entityId );
59- assertEquals ( "update1" , entity .getLazyProperty1 () );
70+ assertEquals ( "lazy1_update" , entity .getLazyProperty1 () );
71+
6072 assertNull ( entity .getEagerProperty () );
6173 assertNull ( entity .getLazyProperty2 () );
6274 } );
75+ }
6376
64- // non-null -> non-null
77+ @ Test
78+ public void updateOneLazyProperty_nonNullToNonNull () {
79+ initNonNull ();
6580 doInHibernate ( this ::sessionFactory , s -> {
6681 LazyEntity entity = s .get ( LazyEntity .class , entityId );
67- entity .setLazyProperty1 ( "update2 " );
82+ entity .setLazyProperty1 ( "lazy1_update " );
6883 } );
6984 doInHibernate ( this ::sessionFactory , s -> {
7085 LazyEntity entity = s .get ( LazyEntity .class , entityId );
71- assertEquals ( "update2" , entity .getLazyProperty1 () );
72- assertNull ( entity .getLazyProperty2 () );
73- assertNull ( entity .getEagerProperty () );
86+ assertEquals ( "lazy1_update" , entity .getLazyProperty1 () );
87+
88+ assertEquals ( "eager_initial" , entity .getEagerProperty () );
89+ assertEquals ( "lazy2_initial" , entity .getLazyProperty2 () );
7490 } );
7591 }
7692
7793 @ Test
78- public void updateOneEagerPropertyAndOneLazyProperty () {
79- // null -> non-null
94+ public void updateOneLazyProperty_nonNullToNull () {
95+ initNonNull ();
8096 doInHibernate ( this ::sessionFactory , s -> {
8197 LazyEntity entity = s .get ( LazyEntity .class , entityId );
82- entity .setEagerProperty ( "eager_update1" );
83- entity .setLazyProperty1 ( "update1" );
98+ entity .setLazyProperty1 ( null );
8499 } );
85100 doInHibernate ( this ::sessionFactory , s -> {
86101 LazyEntity entity = s .get ( LazyEntity .class , entityId );
87- assertEquals ( "eager_update1" , entity .getEagerProperty () );
88- assertEquals ( "update1" , entity .getLazyProperty1 () );
89- assertNull ( entity .getLazyProperty2 () );
102+ assertNull ( entity .getLazyProperty1 () );
103+
104+ assertEquals ( "eager_initial" , entity .getEagerProperty () );
105+ assertEquals ( "lazy2_initial" , entity .getLazyProperty2 () );
90106 } );
107+ }
91108
92- // non-null -> non-null
109+ @ Test
110+ public void updateOneEagerPropertyAndOneLazyProperty_nullToNonNull () {
111+ initNull ();
93112 doInHibernate ( this ::sessionFactory , s -> {
94113 LazyEntity entity = s .get ( LazyEntity .class , entityId );
95- entity .setEagerProperty ( "eager_update2 " );
96- entity .setLazyProperty1 ( "update2 " );
114+ entity .setEagerProperty ( "eager_update " );
115+ entity .setLazyProperty1 ( "lazy1_update " );
97116 } );
98117 doInHibernate ( this ::sessionFactory , s -> {
99118 LazyEntity entity = s .get ( LazyEntity .class , entityId );
100- assertEquals ( "eager_update2" , entity .getEagerProperty () );
101- assertEquals ( "update2" , entity .getLazyProperty1 () );
119+ assertEquals ( "eager_update" , entity .getEagerProperty () );
120+ assertEquals ( "lazy1_update" , entity .getLazyProperty1 () );
121+
102122 assertNull ( entity .getLazyProperty2 () );
103123 } );
104124 }
105125
106126 @ Test
107- public void updateAllLazyProperties () {
108- // null -> non-null
127+ public void updateOneEagerPropertyAndOneLazyProperty_nonNullToNonNull () {
128+ initNonNull ();
109129 doInHibernate ( this ::sessionFactory , s -> {
110130 LazyEntity entity = s .get ( LazyEntity .class , entityId );
111- entity .setLazyProperty1 ( "update1" );
112- entity .setLazyProperty2 ( "update2_1" );
131+ entity .setEagerProperty ( "eager_update" );
132+ entity .setLazyProperty1 ( "lazy1_update" );
133+ } );
134+ doInHibernate ( this ::sessionFactory , s -> {
135+ LazyEntity entity = s .get ( LazyEntity .class , entityId );
136+ assertEquals ( "eager_update" , entity .getEagerProperty () );
137+ assertEquals ( "lazy1_update" , entity .getLazyProperty1 () );
138+
139+ assertEquals ( "lazy2_initial" , entity .getLazyProperty2 () );
140+ } );
141+ }
142+
143+ @ Test
144+ public void updateOneEagerPropertyAndOneLazyProperty_nonNullToNull () {
145+ initNonNull ();
146+ doInHibernate ( this ::sessionFactory , s -> {
147+ LazyEntity entity = s .get ( LazyEntity .class , entityId );
148+ entity .setEagerProperty ( null );
149+ entity .setLazyProperty1 ( null );
113150 } );
114151 doInHibernate ( this ::sessionFactory , s -> {
115152 LazyEntity entity = s .get ( LazyEntity .class , entityId );
116- assertEquals ( "update1" , entity .getLazyProperty1 () );
117- assertEquals ( "update2_1" , entity .getLazyProperty2 () );
118153 assertNull ( entity .getEagerProperty () );
154+ assertNull ( entity .getLazyProperty1 () );
155+
156+ assertEquals ( "lazy2_initial" , entity .getLazyProperty2 () );
119157 } );
158+ }
120159
121- // non-null -> non-null
160+ @ Test
161+ public void updateAllLazyProperties_nullToNonNull () {
162+ initNull ();
122163 doInHibernate ( this ::sessionFactory , s -> {
123164 LazyEntity entity = s .get ( LazyEntity .class , entityId );
124- entity .setLazyProperty1 ( "update2 " );
125- entity .setLazyProperty2 ( "update2_2 " );
165+ entity .setLazyProperty1 ( "lazy1_update " );
166+ entity .setLazyProperty2 ( "lazy2_update " );
126167 } );
127168 doInHibernate ( this ::sessionFactory , s -> {
128169 LazyEntity entity = s .get ( LazyEntity .class , entityId );
129- assertEquals ( "update2" , entity .getLazyProperty1 () );
130- assertEquals ( "update2_2" , entity .getLazyProperty2 () );
170+ assertEquals ( "lazy1_update" , entity .getLazyProperty1 () );
171+ assertEquals ( "lazy2_update" , entity .getLazyProperty2 () );
172+
131173 assertNull ( entity .getEagerProperty () );
132174 } );
133175 }
134176
177+ @ Test
178+ public void updateAllLazyProperties_nonNullToNonNull () {
179+ initNonNull ();
180+ doInHibernate ( this ::sessionFactory , s -> {
181+ LazyEntity entity = s .get ( LazyEntity .class , entityId );
182+ entity .setLazyProperty1 ( "lazy1_update" );
183+ entity .setLazyProperty2 ( "lazy2_update" );
184+ } );
185+ doInHibernate ( this ::sessionFactory , s -> {
186+ LazyEntity entity = s .get ( LazyEntity .class , entityId );
187+ assertEquals ( "lazy1_update" , entity .getLazyProperty1 () );
188+ assertEquals ( "lazy2_update" , entity .getLazyProperty2 () );
189+
190+ assertEquals ( "eager_initial" , entity .getEagerProperty () );
191+ } );
192+ }
193+
194+ @ Test
195+ public void updateAllLazyProperties_nonNullToNull () {
196+ initNonNull ();
197+ doInHibernate ( this ::sessionFactory , s -> {
198+ LazyEntity entity = s .get ( LazyEntity .class , entityId );
199+ entity .setLazyProperty1 ( null );
200+ entity .setLazyProperty2 ( null );
201+ } );
202+ doInHibernate ( this ::sessionFactory , s -> {
203+ LazyEntity entity = s .get ( LazyEntity .class , entityId );
204+ assertNull ( entity .getLazyProperty1 () );
205+ assertNull ( entity .getLazyProperty2 () );
206+
207+ assertEquals ( "eager_initial" , entity .getEagerProperty () );
208+ } );
209+ }
210+
135211 @ Entity
136212 @ Table (name = "LAZY_ENTITY" )
137213 private static class LazyEntity {
0 commit comments