如何获得一对多关系的第二级中所有对象的计数? [Java]

时间:2019-02-28 01:18:21

标签: java spring-boot one-to-many

我有三个实体:工厂,订单和项目,它们之间是一对多的关系:

工厂有很多订单
订单有很多物品

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

    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标记为已删除时,我需要找到所选Factory的所有订单和相关项目,并将它们也标记为删除。

一切正常,但我只是测试数据库中的记录,如果您的数据库很大且记录很多,我不确定这是这样做的方法... 所以我想知道是否有一些优雅且更有效的方法来完成此操作。

我正在使用Java Spring Boot 和PostgreSQL

2 个答案:

答案 0 :(得分:0)

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

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

可以更快地解决您的问题。

答案 1 :(得分:0)

您可以尝试JPA Query

List<Order> findByFactoryIdAndIsDeletedFalse(Long factoryId);