如何计算二对一对多关系中所有对象的计数? 【JAVA]

问题描述 投票:-1回答:2

我有三个实体:工厂,订单和物品,一对多关系,如下所示:

工厂有很多订单 订单有很多项目

我需要获得在所选工厂下注册的所有订单的所有项目的总数/数量。我这样做了......

    Factory factory = factoryService.findOne(factoryId);
    List<Order> orders = factory.getOrders();
    int count=0;
    for(Order o: orders){
    if (o.isDeleted()!=true)
    int numberOfItems = o.getItems().size();
    count+= numberOfItems;
    }
}

我用'soft'删除做了类似的事情 - 当我将Factory标记为已删除时,我需要找到所选工厂的所有订单和相关项目,并将它们标记为已删除。

它一切正常,但我只是在数据库中测试记录,如果你有大量数据库,有很多记录,我不确定这是怎么做的...所以我想知道是否有一些优雅和更有效的方法做这个。

我正在使用Java Spring Boot和PostgreSQL

java spring-boot one-to-many
2个回答
0
投票

我个人认为本土的query可以轻松解决您的问题。使用类似的东西:

SELECT COUNT(*) FROM items where id IN (select item_id from orders where factory_id = 'factoryId');

会更快地解决你的问题。


0
投票

你可以尝试JPA Query

List<Order> findByFactoryIdAndIsDeletedFalse(Long factoryId);
© www.soinside.com 2019 - 2024. All rights reserved.