@@ -88,6 +88,10 @@ public void singleRef() {
8888 public static class SingleReferenceLazyTestEntity extends BasicTestEntity {
8989 @ Ref (lazy = true )
9090 private BasicTestEntity entity ;
91+
92+ public BasicTestEntity getEntity () {
93+ return entity ;
94+ }
9195 }
9296
9397 @ Test
@@ -104,6 +108,60 @@ public void singleRefLazy() {
104108 assertThat (document .entity .getId (), is (e1 .getId ()));
105109 }
106110
111+ public static class DeepReferenceTestEntity extends BasicTestEntity {
112+ @ Ref
113+ private SingleReferenceTestEntity entity ;
114+ }
115+
116+ @ Test
117+ public void deepRef () {
118+ BasicTestEntity e1 = new BasicTestEntity ();
119+ template .insert (e1 , insertOpts );
120+
121+ SingleReferenceTestEntity e2 = new SingleReferenceTestEntity ();
122+ e2 .entity = e1 ;
123+ template .insert (e2 , insertOpts );
124+
125+ DeepReferenceTestEntity e3 = new DeepReferenceTestEntity ();
126+ e3 .entity = e2 ;
127+ template .insert (e3 , insertOpts );
128+
129+ final DeepReferenceTestEntity document = template .find (e3 .id , DeepReferenceTestEntity .class , findOpts ).get ();
130+ assertThat (document , is (notNullValue ()));
131+ assertThat (document .entity , is (notNullValue ()));
132+ assertThat (document .entity .id , is (e2 .id ));
133+ assertThat (document .entity .entity .id , is (e1 .id ));
134+ }
135+
136+ public static class DeepReferenceLazyTestEntity extends BasicTestEntity {
137+ @ Ref (lazy = true )
138+ private SingleReferenceLazyTestEntity entity ;
139+
140+ public SingleReferenceLazyTestEntity getEntity () {
141+ return entity ;
142+ }
143+ }
144+
145+ @ Test
146+ public void deepRefLazy () {
147+ BasicTestEntity e1 = new BasicTestEntity ();
148+ template .insert (e1 , insertOpts );
149+
150+ SingleReferenceLazyTestEntity e2 = new SingleReferenceLazyTestEntity ();
151+ e2 .entity = e1 ;
152+ template .insert (e2 , insertOpts );
153+
154+ DeepReferenceLazyTestEntity e3 = new DeepReferenceLazyTestEntity ();
155+ e3 .entity = e2 ;
156+ template .insert (e3 , insertOpts );
157+
158+ final DeepReferenceLazyTestEntity document = template .find (e3 .id , DeepReferenceLazyTestEntity .class , findOpts ).get ();
159+ assertThat (document , is (notNullValue ()));
160+ assertThat (document .getEntity (), is (notNullValue ()));
161+ assertThat (document .getEntity ().getId (), is (e2 .id ));
162+ assertThat (document .getEntity ().getEntity ().getId (), is (e1 .id ));
163+ }
164+
107165 public static class MultiReferenceTestEntity extends BasicTestEntity {
108166 @ Ref
109167 private Collection <BasicTestEntity > entities ;
@@ -180,6 +238,36 @@ public void testNestedRef() {
180238 assertThat (document .sub .entities .iterator ().next ().id , is (e .id ));
181239 }
182240
241+ public static class NestedReferenceLazyTestEntity extends BasicTestEntity {
242+ private NestedReferenceLazySubTestEntity sub ;
243+ }
244+
245+ public static class NestedReferenceLazySubTestEntity {
246+ @ Ref (lazy = true )
247+ private Collection <BasicTestEntity > entities ;
248+
249+ public Collection <BasicTestEntity > getEntities () {
250+ return entities ;
251+ }
252+ }
253+
254+ @ Test
255+ public void testNestedRefLazy () {
256+ final NestedReferenceLazyTestEntity o = new NestedReferenceLazyTestEntity ();
257+ o .sub = new NestedReferenceLazySubTestEntity ();
258+ o .sub .entities = new ArrayList <>();
259+ final BasicTestEntity e = new BasicTestEntity ();
260+ o .sub .entities .add (e );
261+ template .insert (e , insertOpts );
262+ template .insert (o , insertOpts );
263+ final NestedReferenceLazyTestEntity document = template .find (o .id , NestedReferenceLazyTestEntity .class , findOpts ).get ();
264+ assertThat (document , is (notNullValue ()));
265+ assertThat (document .sub , is (notNullValue ()));
266+ assertThat (document .sub .getEntities (), is (notNullValue ()));
267+ assertThat (document .sub .getEntities ().size (), is (1 ));
268+ assertThat (document .sub .getEntities ().iterator ().next ().getId (), is (e .id ));
269+ }
270+
183271 public static class ConstructorWithRefParamsTestEntity extends BasicTestEntity {
184272 @ Ref
185273 private final BasicTestEntity value1 ;
0 commit comments