Spring Boot服务报错:无法调用Optional对象的setTotalStockQuantity方法
问题分析与解决
错误原因
你遇到的IDE报错是因为productInStock是Optional<Stock>类型,它作为容器类本身并没有setTotalStockQuantity()方法,必须先取出其中包裹的Stock实体对象才能调用对应的方法。另外代码里还有一个变量未定义的问题:if分支中的stockRepository.save(stock);里的stock变量从未声明过。
修正后的代码
private final TransactionRepository transactionRepository; private final StockRepository stockRepository; public Transaction saveNewProduct(Transaction transaction) { Long productId = transaction.getProduct().getId(); Integer newProductQuantity = transaction.getQuantity(); Optional<Stock> productInStock = stockRepository.findByProductId(productId); if(productInStock.isPresent()) { // 取出Optional中的Stock实体 Stock existingStock = productInStock.get(); // 直接从已获取的实体中读取当前库存,避免重复查询数据库 Integer updatedProductQuantity = existingStock.getTotalStockQuantity() + newProductQuantity; existingStock.setTotalStockQuantity(updatedProductQuantity); // 保存更新后的现有库存实体 stockRepository.save(existingStock); } else { Stock stock = new Stock(); stock.setProduct(transaction.getProduct()); stock.setTotalStockQuantity(transaction.getQuantity()); stockRepository.save(stock); } return transactionRepository.save(transaction); }
关键修改点
- 从
Optional<Stock>中通过get()方法获取实际的Stock实体对象existingStock,再对其进行属性修改 - 移除了多余的
stockRepository.findTotalStockQuantityByProductId(productId)查询,直接从已加载的existingStock中获取当前库存数量,减少数据库交互开销 - 修正了保存时的变量引用,使用已获取的
existingStock而非未定义的stock变量
内容的提问来源于stack exchange,提问作者Ilmars
相关产品推荐
相关产品推荐

