From 99f416cffcd8e0163f5c264bb496ea03cbbf2fec Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Fri, 31 Mar 2023 11:43:04 +0200 Subject: [PATCH] Add data-mongo test for lazy loading collection like DBRef. See: spring-projects/spring-data-mongodb#4351 See gh-176 --- .../data/mongodb/DataMongoDbApplicationAotTests.java | 8 ++++++++ .../src/main/java/com/example/data/mongodb/CLR.java | 3 +++ .../src/main/java/com/example/data/mongodb/Order.java | 11 +++++++++++ 3 files changed, 22 insertions(+) diff --git a/data/data-mongodb/src/appTest/java/com/example/data/mongodb/DataMongoDbApplicationAotTests.java b/data/data-mongodb/src/appTest/java/com/example/data/mongodb/DataMongoDbApplicationAotTests.java index 198c887b..8232098d 100644 --- a/data/data-mongodb/src/appTest/java/com/example/data/mongodb/DataMongoDbApplicationAotTests.java +++ b/data/data-mongodb/src/appTest/java/com/example/data/mongodb/DataMongoDbApplicationAotTests.java @@ -47,6 +47,14 @@ class DataMongoDbApplicationAotTests { }); } + @Test + void lazyDbRef(AssertableOutput output) { + Awaitility.await().atMost(Duration.ofSeconds(10)).untilAsserted(() -> { + assertThat(output).hasLineMatching( + ".*List\\(\\d\\$LazyLoadingProxy\\)\\{\\W?com\\.example\\.data\\.mongodb\\.Coupon@.*\\W?\\}.*"); + }); + } + @Test void queryByExample(AssertableOutput output) { Awaitility.await().atMost(Duration.ofSeconds(10)).untilAsserted(() -> { diff --git a/data/data-mongodb/src/main/java/com/example/data/mongodb/CLR.java b/data/data-mongodb/src/main/java/com/example/data/mongodb/CLR.java index 3ad6141d..fcaf93dd 100644 --- a/data/data-mongodb/src/main/java/com/example/data/mongodb/CLR.java +++ b/data/data-mongodb/src/main/java/com/example/data/mongodb/CLR.java @@ -259,12 +259,15 @@ class CLR implements CommandLineRunner { order.setCoupon(coupon); order.setReduction(coupon); order.setSimpleRef(coupon); + order.setAllCoupons(List.of(coupon)); orderRepository.save(order); Optional loaded = orderRepository.findById(order.getId()); log("simple ref (no proxy): %s", loaded.get().getSimpleRef().getCode()); log("lazyLoading (aot): %s", loaded.get().getCoupon().getCode()); log("lazyLoading (jdk): %s", loaded.get().getReduction().getId()); + log("lazyLoading - lists (jdk): List(%s){ %s }", loaded.get().getAllCoupons(), + loaded.get().getAllCoupons().get(0)); log("-----------------\n\n\n"); } diff --git a/data/data-mongodb/src/main/java/com/example/data/mongodb/Order.java b/data/data-mongodb/src/main/java/com/example/data/mongodb/Order.java index d37e4120..be1d9a43 100755 --- a/data/data-mongodb/src/main/java/com/example/data/mongodb/Order.java +++ b/data/data-mongodb/src/main/java/com/example/data/mongodb/Order.java @@ -59,6 +59,9 @@ public class Order { @DBRef(lazy = true) // JdkProxy private PriceReduction reduction; + @DBRef(lazy = true) // JdkProxy + private List allCoupons; + @DocumentReference private Discount documentRef; @@ -185,6 +188,14 @@ public class Order { this.lazyDocumentRef = lazyDocumentRef; } + public void setAllCoupons(List allCoupons) { + this.allCoupons = allCoupons; + } + + public List getAllCoupons() { + return allCoupons; + } + @Override public String toString() { return "Order{" + "id='" + id + '\'' + ", customerId='" + customerId + '\'' + ", orderDate=" + orderDate