我在 Spring Boot 项目中使用存储过程并尝试获取输出值,但在我的项目中它总是返回 null。但是,如果我通过 HeidiSQL 调用该过程,它会起作用并为我提供正确的值。
所以它必须用我的java代码做一些事情。我调试了受影响的方法,但找不到返回 null 的原因。
我已经尝试查找其他帖子,但找不到与我的特定问题相匹配的内容。
这是我尝试使用存储过程的方法:
公司资源服务实现
@Service
public class CompanyResourceServiceImpl implements CompanyResourceService {
@PersistenceContext
private EntityManager entityManager;
...
private int getMetalResourceByPlayerId(int theId) {
StoredProcedureQuery theQuery = entityManager.createStoredProcedureQuery("getAllMetalFromCompaniesByPlayerId");
theQuery.registerStoredProcedureParameter(1, Integer.class, ParameterMode.IN);
theQuery.registerStoredProcedureParameter(2, BigDecimal.class, ParameterMode.OUT);
theQuery.setParameter(1, theId);
theQuery.execute();
BigDecimal outAmount = (BigDecimal) theQuery.getOutputParameterValue(2);
return outAmount.intValue();
}
...
}
以下是存储过程:
getAllMetalFromCompaniesByPlayerId
CREATE DEFINER=`root`@`localhost` PROCEDURE `getAllMetalFromCompaniesByPlayerId`(
IN `playerId` INT,
OUT `metalSum` DECIMAL(19,2)
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
SELECT sum(cr.amount) as metalSum
FROM company_resource cr
JOIN company c ON (c.id = cr.company_id) WHERE c.player_id = playerId and cr.resource_id = 1;
END
我的目标是获取输出值并在@Scheduled方法中使用它。正如我所说,在 HeidiSQL 中,存储过程有效。
跃然一笑
相关分类