Hibernate uuid 生成出现 'data too long' 错误

标签 hibernate jpa

我在使用 hibernate 持久化到 mysql 的表中时遇到以下错误:

WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] SQL Error: 1406, SQLState: 22001
ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] Data truncation: Data too long for column 'REQUEST_ID' at row 1
ERROR [some.class.ClassImpl] persist failed: org.hibernate.exception.DataException: Data truncation: Data too long for column 'REQUEST_ID' at row 1
    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:71) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]

这是我如何使用生成的值 uuid 作为我的主键

@Id
@Column(name="REQUEST_ID")
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")

这是我在 mysql 数据库中的专栏:

+---------------------+---------------+------+-----+---------+-------+
| Field               | Type          | Null | Key | Default | Extra |
+---------------------+---------------+------+-----+---------+-------+
| REQUEST_ID          | varchar(32)   | NO   | PRI | NULL    |       |
+---------------------+---------------+------+-----+---------+-------+

最佳答案

我很确定“uuid2”会生成一个带有破折号的 UUID,例如

4d8bef3d-f46f-4f4e-8cad-673feaed896c

尝试将您的数据库列设置为:

varchar(36)

并可选择将您的注释更新为以下内容:

@Column(name="REQUEST_ID", length=36)

@Length(min=36, max=36)

关于Hibernate uuid 生成出现 'data too long' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21902467/

相关文章:

java - spring data jpa 表通过一对一关联连接

java - 使用复合主键的 SELECT 查询

mysql - 如何创建一个 jpa 查询,该查询采用多个(动态)范围数量的 Between 子句来获取结果

hibernate - grails 2.4.3 升级后不必要的数据库 changeSet 与 boolean 相关

java - 将 VARBINARY 值隐式转换为 NUMERIC 字段期间出现域错误?

hibernate - 为什么这个值对于我的 H2 表来说太长

java - "proxied"状态对于 Hibernate session 意味着什么

hibernate - 常见的 ORM 解决方案可以与 OO 数据库交互吗?

java - 如何测试验证注释?

java - 如何使用 Hibernate/ORM 保持干净的层分离?