java - 从 Java Spring Boot 映射 mysql 数据库中的tinyint(3)

标签 java mysql spring tinyint

我正在使用旧代码库来重构 SMS 网关,该网关由 mysql 的 "m_outbound_messages" 表中名为 "delivery_status" 的tinyint(3) 列组成数据库。此列根据以下枚举记录提交到 SMS 网关的消息的状态:

public enum SmsMessageStatusType {
    INVALID(0, "smsMessageStatusType.invalid"), // unknown status type
    PENDING(100, "smsMessageStatusType.pending"), // message received
    WAITING_FOR_REPORT(150, "smsMessageStatusType.pending"),
    SENT(200, "smsMessageStatusType.sent"), // message sent to the SMS gateway
    DELIVERED(300, "smsMessageStatusType.delivered"), // SMS gateway's attempt to deliver message to recipient's phone was successful
    FAILED(400, "smsMessageStatusType.failed"); // SMS gateway's attempt to deliver message to recipient's phone failed
}

在旧代码库中,delivery_status 字段已映射到“m_outbound_messages” 表的 @Entity 类中的 Integer 数据类型。但是,当我通过将 SmsMessageStatusType.FAILED.getvalue() 作为 Integer 传递来更改数据库中特定行的 delivery_status 列的状态时,出现以下错误:

org.drizzle.jdbc.internal.common.QueryException: Out of range value for column 'delivery_status' at row 1 

我还尝试将 delivery_status 声明为无符号的tinyint(3),但问题仍然存在。此外,当我将 delivery-status 映射到 boolean 变量时,该值并未以枚举值所需的格式存储。

但是,默认情况下,数据库中的所有行都会正确存储,并将 SmsMessageStatusType.Pending 值 (100) 作为其delivery_status

任何关于如何以所需格式从 Java 映射tinyint(3) 的指针将不胜感激。

最佳答案

MySQL tinyint 是 represented as a single byte ,这意味着有符号字段的最大值为 127,无符号字段的最大值为 255。无论哪种情况,该值都小于您尝试设置的值 400。

另请参阅this answer澄清了 (3) 指示显示宽度,并且不影响可用于存储值的字节数。

关于java - 从 Java Spring Boot 映射 mysql 数据库中的tinyint(3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48226222/

相关文章:

java - 找不到类的序列化程序,没有发现创建 BeanSerializer 的属性(为避免异常,请禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS)

java - 如何在 Spring Boot 2 项目中生成 CRUD UI 的最佳方式?与 Django 的做法类似

java - 从字符串中删除所有没有特定字符的字符?

java - R.id.home 给出了错误的值?

java - 填充异常: Given final block not properly padded

php - 如何在 PHP 或 MySQL 中将字符串转换为列表

java - 如何在插入之前检查数据库是否有重复项?

MySQL CURDATE() - 昨天是这个月的最后一天

mysql - 更改编码、rails 和 mysql

Java如何从类型T中获取类对象?