我有三个实体:工厂,订单和物品,一对多关系,如下所示:
工厂有很多订单 订单有很多项目
我需要获得在所选工厂下注册的所有订单的所有项目的总数/数量。我这样做了......
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
我个人认为本土的query
可以轻松解决您的问题。使用类似的东西:
SELECT COUNT(*) FROM items where id IN (select item_id from orders where factory_id = 'factoryId');
会更快地解决你的问题。
你可以尝试JPA Query
List<Order> findByFactoryIdAndIsDeletedFalse(Long factoryId);