一、异常:

说明:程序试图将一个 java.math.BigDecimal 类型的值,赋值给一个 java.lang.Double 类型的字段,但是 Java 不允许这种直接转换。
二、原因:
- 数据库层面 :你的建表语句中
price字段定义为decimal(10, 2)。当 JDBC 驱动从数据库读取这个字段时,为了保持精度,它会自动将其映射为 Java 中的java.math.BigDecimal类型。- 实体类层面 :你的 Java 实体类
org.hlx.my2.pojo.Book中,price属性被定义为了Double(基本类型double的包装类)。- 冲突发生 :在
BaseDao.java的第 111 行(通常是在使用反射field.set(obj, value)进行结果集映射时),程序拿到了数据库的BigDecimal对象,试图强行塞进实体类的Double属性中,导致报错。
三、解决
修改实体类
将实体类
Book.java中的price字段类型从Double改为BigDecimal。这是处理金额最规范的做法,可以避免浮点数计算丢失精度的问题。
java
mport java.math.BigDecimal;
public class Book {
// ...
private BigDecimal price;
// Getter 和 Setter 也要相应修改
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
// ...
}