我在使用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 | |
+---------------------+---------------+------+-----+---------+-------+
答案 0 :(得分:5)
我很确定" uuid2"生成一个带有破折号的UUID,例如
4d8bef3d-f46f-4f4e-8cad-673feaed896c
尝试将数据库列设置为:
varchar(36)
并可选择将注释更新为以下内容:
@Column(name="REQUEST_ID", length=36)
@Length(min=36, max=36)
答案 1 :(得分:0)
使用@Column(name="REQUEST_ID", length=32)
,目前生成的变量字符长度大于32.您还可以使用@Length(max=32)
更新:,因为@ cliff.meyers回答 uuid2 根据this hibernate文档 uuid2 >在生成的字符串中使用四个' - ' strong>使用org.hibernate.id.uuid.StandardRandomStrategy
作为使用
“版本3”(又名“随机”)UUID值通过java.util.UUID的randomUUID方法
由this引用指定为36个字符长。您需要将REQUEST_ID
更改为varchar(36)
或使用strategy = "uuid"
string of 32 hexidecimal digits
。