延迟加载 - 仅在内容更改时更新

时间:2017-12-30 15:45:55

标签: java orm java-8 lazy-loading optional

我在我的java应用程序中使用简单的Supplier / Optional'子类'实现了Lazy Loading。

我的课程:UserOrder,其中一个用户有多个订单

这个类看起来像这样:

public class Lazy<T> {
private Optional<T> instance = Optional.empty();
private final Supplier<T> supplier;

public Lazy(Supplier<T> theSupplier) {
    supplier = theSupplier;
}

public T get() {
    if (!instance.isPresent()) {
        instance = Optional.of(supplier.get());
    }

    return instance.get();
}

我用以下内容初始化它:

Lazy<List<Order>> lazyOrders = new Lazy<>(() -> {
        List<Order> orders = null;
        orders = parent.getOrders();
        return orders;
    });

在用户类中,lazy的使用如下所示:private Lazy<List<Order>> orders在getter中我使用orders.get()

问题是由于!instance.isPresent(),一旦加载了orders属性(通过调用get),它就永远不会被加载

如果我使用getOrders()然后向我的数据库添加更多订单并再次调用getOrders(),这将成为一个问题,它只会返回旧状态。

我可以删除isPresent并在每次调用getter时加载它,但我想也许有人有更好的解决方案。

0 个答案:

没有答案