@@ -310,6 +310,93 @@ public void lazyLoadingProxyForToStringObjectMethodOverridingDbref() {
310
310
assertProxyIsResolved (result .dbRefToToStringObjectMethodOverride , true );
311
311
}
312
312
313
+ /**
314
+ * @see DATAMONGO-884
315
+ */
316
+ @ Test
317
+ public void callingToStringObjectMethodOnLazyLoadingDbrefShouldNotInitializeProxy () {
318
+
319
+ String id = "42" ;
320
+ String value = "bubu" ;
321
+ MappingMongoConverter converterSpy = spy (converter );
322
+ doReturn (new BasicDBObject ("_id" , id ).append ("value" , value )).when (converterSpy ).readRef ((DBRef ) any ());
323
+
324
+ BasicDBObject dbo = new BasicDBObject ();
325
+ WithObjectMethodOverrideLazyDbRefs lazyDbRefs = new WithObjectMethodOverrideLazyDbRefs ();
326
+ lazyDbRefs .dbRefToPlainObject = new LazyDbRefTarget (id , value );
327
+ converterSpy .write (lazyDbRefs , dbo );
328
+
329
+ WithObjectMethodOverrideLazyDbRefs result = converterSpy .read (WithObjectMethodOverrideLazyDbRefs .class , dbo );
330
+
331
+ assertThat (result .dbRefToPlainObject , is (notNullValue ()));
332
+ assertProxyIsResolved (result .dbRefToPlainObject , false );
333
+
334
+ // calling Object#toString does not initialize the proxy.
335
+ String proxyString = result .dbRefToPlainObject .toString ();
336
+ assertThat (proxyString , is ("lazyDbRefTarget" + ":" + id + "$LazyLoadingProxy" ));
337
+ assertProxyIsResolved (result .dbRefToPlainObject , false );
338
+
339
+ // calling another method not declared on object triggers proxy initialization.
340
+ assertThat (result .dbRefToPlainObject .getValue (), is (value ));
341
+ assertProxyIsResolved (result .dbRefToPlainObject , true );
342
+ }
343
+
344
+ /**
345
+ * @see DATAMONGO-884
346
+ */
347
+ @ Test
348
+ public void equalsObjectMethodOnLazyLoadingDbrefShouldNotInitializeProxy () {
349
+
350
+ String id = "42" ;
351
+ String value = "bubu" ;
352
+ MappingMongoConverter converterSpy = spy (converter );
353
+ doReturn (new BasicDBObject ("_id" , id ).append ("value" , value )).when (converterSpy ).readRef ((DBRef ) any ());
354
+
355
+ BasicDBObject dbo = new BasicDBObject ();
356
+ WithObjectMethodOverrideLazyDbRefs lazyDbRefs = new WithObjectMethodOverrideLazyDbRefs ();
357
+ lazyDbRefs .dbRefToPlainObject = new LazyDbRefTarget (id , value );
358
+ lazyDbRefs .dbRefToToStringObjectMethodOverride = new ToStringObjectMethodOverrideLazyDbRefTarget (id , value );
359
+ converterSpy .write (lazyDbRefs , dbo );
360
+
361
+ WithObjectMethodOverrideLazyDbRefs result = converterSpy .read (WithObjectMethodOverrideLazyDbRefs .class , dbo );
362
+
363
+ assertThat (result .dbRefToPlainObject , is (notNullValue ()));
364
+ assertProxyIsResolved (result .dbRefToPlainObject , false );
365
+
366
+ assertThat (result .dbRefToPlainObject , is (equalTo (result .dbRefToPlainObject )));
367
+ assertThat (result .dbRefToPlainObject , is (not (equalTo (null ))));
368
+ assertThat (result .dbRefToPlainObject , is (not (equalTo ((Object ) lazyDbRefs .dbRefToToStringObjectMethodOverride ))));
369
+
370
+ assertProxyIsResolved (result .dbRefToPlainObject , false );
371
+ }
372
+
373
+ /**
374
+ * @see DATAMONGO-884
375
+ */
376
+ @ Test
377
+ public void hashcodeObjectMethodOnLazyLoadingDbrefShouldNotInitializeProxy () {
378
+
379
+ String id = "42" ;
380
+ String value = "bubu" ;
381
+ MappingMongoConverter converterSpy = spy (converter );
382
+ doReturn (new BasicDBObject ("_id" , id ).append ("value" , value )).when (converterSpy ).readRef ((DBRef ) any ());
383
+
384
+ BasicDBObject dbo = new BasicDBObject ();
385
+ WithObjectMethodOverrideLazyDbRefs lazyDbRefs = new WithObjectMethodOverrideLazyDbRefs ();
386
+ lazyDbRefs .dbRefToPlainObject = new LazyDbRefTarget (id , value );
387
+ lazyDbRefs .dbRefToToStringObjectMethodOverride = new ToStringObjectMethodOverrideLazyDbRefTarget (id , value );
388
+ converterSpy .write (lazyDbRefs , dbo );
389
+
390
+ WithObjectMethodOverrideLazyDbRefs result = converterSpy .read (WithObjectMethodOverrideLazyDbRefs .class , dbo );
391
+
392
+ assertThat (result .dbRefToPlainObject , is (notNullValue ()));
393
+ assertProxyIsResolved (result .dbRefToPlainObject , false );
394
+
395
+ assertThat (result .dbRefToPlainObject .hashCode (), is (311365444 ));
396
+
397
+ assertProxyIsResolved (result .dbRefToPlainObject , false );
398
+ }
399
+
313
400
/**
314
401
* @see DATAMONGO-884
315
402
*/
@@ -513,6 +600,7 @@ public boolean equals(Object obj) {
513
600
514
601
static class WithObjectMethodOverrideLazyDbRefs {
515
602
603
+ @ org .springframework .data .mongodb .core .mapping .DBRef (lazy = true ) LazyDbRefTarget dbRefToPlainObject ;
516
604
@ org .springframework .data .mongodb .core .mapping .DBRef (lazy = true ) ToStringObjectMethodOverrideLazyDbRefTarget dbRefToToStringObjectMethodOverride ;
517
605
@ org .springframework .data .mongodb .core .mapping .DBRef (lazy = true ) EqualsAndHashCodeObjectMethodOverrideLazyDbRefTarget dbRefEqualsAndHashcodeObjectMethodOverride2 ;
518
606
@ org .springframework .data .mongodb .core .mapping .DBRef (lazy = true ) EqualsAndHashCodeObjectMethodOverrideLazyDbRefTarget dbRefEqualsAndHashcodeObjectMethodOverride1 ;
0 commit comments