gpt4 book ai didi

java - Java 中反对类强制转换异常

转载 作者:行者123 更新时间:2023-12-01 04:14:27 24 4
gpt4 key购买 nike

有一个问题让我有点抓狂。这是Java方法。

public List<FtpActiveMerchantDTO> getFtpActiveMerchants() {

String sql = "select m.merchantId, ma.merchantAcctId, m.domain, f.fetchUrl, ma.acctActive, " +
"f.fieldDelimiter, f.feedType " +
"from merchant_account ma " +
"join merchant_ftp_account f on f.merchantAcctId = ma.merchantAcctId " +
"join merchant m on m.merchantAcctId = ma.merchantAcctId " +
"where f.fetchUrl is not null and ma.acctActive = 1";

Query query = currentSession().createSQLQuery(sql);

List<FtpActiveMerchantDTO> ftpActiveMerchantDTOList = new ArrayList<FtpActiveMerchantDTO>();
int merchantId, merchantAcctId;
byte acctActive;
for (Object rowObject : query.list()) {
Object[] row = (Object []) rowObject;
merchantId = ((BigDecimal) row[0]).intValue();
merchantAcctId = ((BigDecimal) row[1]).intValue();
acctActive = ((BigDecimal) row[4]).byteValue();
ftpActiveMerchantDTOList.add(new FtpActiveMerchantDTOBuilder().withMerchantId(merchantId)
.withMerchantAcctId(merchantAcctId).withDomain((String) row[2])
.withFetchUrl((String) row[3]).withAcctActive(acctActive > 0)
.withFieldDelimiter(row[5].toString()).withFeedType((String) row[6]).build());
}

return ftpActiveMerchantDTOList;
}

当我使用此处显示的代码运行我的服务时,我得到

$ curl -X GET http://localhost:8080/merchants/ftpActive
{"responseData":null,"errorData":[{"code":500,"detailMessage":"","message":"java.lang.Byte cannot be cast to java.math.BigDecimal"}],"debugData":null}

错误发生在分配acctActive 的行。当我将该行修复为:

acctActive = (Byte) row[4];

然后服务按预期工作。但是我的集成测试(从 IntelliJ 内部运行)

private void whenFetchingFtpActiveMerchants() {
openAndBindSession();
ftpActiveMerchantDTOList = merchantDAO.getFtpActiveMerchants();
flushAndCloseSession();
}

失败,并出现以下错误:

java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Byte
at com.pronto.mpds.dal.MerchantDAOImpl.getFtpActiveMerchants(MerchantDAOImpl.java:143)
at com.pronto.mpds.dal.MerchantDAOIT.whenFetchingFtpActiveMerchants(MerchantDAOIT.java:96)
at com.pronto.mpds.dal.MerchantDAOIT.testFtpActiveMerchants(MerchantDAOIT.java:44)
...

db表中的字段是tinyint(4)。为什么数据库查询的结果“期望”是 BigDecimal?是否有某种默认数据类型?我知道我没有在任何地方配置。

最佳答案

乍一看,集成测试的数据库架构与生产数据库架构不同,因此类型不匹配。

关于java - Java 中反对类强制转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19576494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com