我有三个实体:工厂,订单和项目,它们之间是一对多的关系:
工厂有很多订单
订单有很多物品
我需要获取在所选工厂下注册的所有订单的所有项目的总数/总数。 我是这样做的...
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
答案 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);