离谱bug:Unsupported conversion from DATE to java.lang.Integer

今天遇到的离谱bug,明明数据库是datetime,实体类也是date 完全没错,但是映射的时候一直报错
Unsupported conversion from DATE to java.lang.Integer
查了一下才知道 是因为实体类里面有了一个带参构造器导致的,这样mybatis没有找到无参构造器 就直接用的带参构造器,一直访问的是这个第二个参数

然后加了无参构造器后就好了,习惯问题,记录一下,上次遇到就解决过了,这次又遇到了,还是记一下吧,不然又忘记了

`com.mysql.cj.exceptions.DataConversionException: Unsupported conversion from TIMESTAMP to java.lang.Integer` 错误通常是由于代码尝试将数据库中的 `TIMESTAMP` 类型数据转换为 `java.lang.Integer` 类型,而这两种类型之间不存在直接的转换关系导致的。以下是一些可能的解决方法: ### 检查数据类型映射 确保实体类中的属性类型与数据库表中对应字段的类型一致。在 Hibernate 或其他 ORM 框架中,实体类的属性类型应准确映射到数据库字段类型。例如,如果数据库字段是 `TIMESTAMP` 类型,实体类中对应的属性应该是 `java.util.Date` 或 `java.time.LocalDateTime` 类型。 ```java import java.time.LocalDateTime; public class User { private LocalDateTime releaseTime; // Getters and setters public LocalDateTime getReleaseTime() { return releaseTime; } public void setReleaseTime(LocalDateTime releaseTime) { this.releaseTime = releaseTime; } } ``` ### 修改查询语句 如果使用 SQL 查询语句,确保查询结果的处理逻辑正确。避免在代码中直接将 `TIMESTAMP` 类型的查询结果赋值给 `Integer` 类型的变量。 ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.time.LocalDateTime; public class Main { public static void main(String[] args) { try { Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password"); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("SELECT release_time FROM your_table"); while (resultSet.next()) { LocalDateTime releaseTime = resultSet.getObject("release_time", LocalDateTime.class); // 处理 releaseTime } resultSet.close(); statement.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` ### 转换逻辑处理 如果确实需要将 `TIMESTAMP` 类型的数据转换为 `Integer` 类型,可以考虑将 `TIMESTAMP` 转换为时间戳(毫秒数),然后再将其转换为 `Integer`。需要注意的是,时间戳(毫秒数)可能会超出 `Integer` 类型的范围,因此在转换时需要谨慎处理。 ```java import java.sql.Timestamp; public class TimestampToInteger { public static Integer convertTimestampToInteger(Timestamp timestamp) { if (timestamp != null) { long timeInMillis = timestamp.getTime(); if (timeInMillis <= Integer.MAX_VALUE) { return (int) timeInMillis; } } return null; } } ``` ### 检查配置文件 如果使用 Hibernate 等 ORM 框架,检查映射文件(如 `.hbm.xml`)或注解配置,确保属性类型与数据库字段类型的映射正确。 ```xml <class name="com.ldz.model.user.User" table="user"> <id name="id" column="user_id"> <generator class="native"/> </id> <property name="releaseTime" column="release_time" type="java.time.LocalDateTime"/> </class> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值