Hibernate注解如何设置MYSQL数据库的数据类型 错误Data truncation: Data too long for column 'artext' at row 1

Hibernate注解如何设置MYSQL数据库的数据类型  错误Data truncation: Data too long for column 'artext' at row 1

今天在测试文章页面,上传保存文章的时候,发现向数据库写入数据,会出现如下错误


com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'artext' at row 1
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4188)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2818)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2157)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2460)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2377)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2361)
	at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208)
	at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:96)
	at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:58)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3032)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3551)
这个错误的意思就是说,当前传入的数据太大了,无法保存


经过查询sql后台发现,该列的数据类型是varchar

varchar最多能保存255个字节,所以出现这个错误也就不难理解了

因为在Hibernate中,我们创建实体的注解格式一般如下


@Column(name = "artext", unique = false, nullable = false)
public String getArtext() {
 return artext;
 }
 public void setArtext(String artext) {
 this.artext = artext;
 }

这个注解表示这个字段不是唯一的,也不能为空


默认情况下,当Hibernate创建这个表时,该字段在数据库中数据类型时varchar类型


我们可以手动去数据库修改这个字段的类型,比如修改为LONGTEXT类型

我们也可以修改我们的实体中的对应字段,将其改为 LONGTEXT

LONGTEXT最大长度4294967295个字元 (2^32-1)

修改实体的注解代码如下


@Column(name = "artext", unique = false, nullable = false,columnDefinition="LONGTEXT NOT NULL")
public String getArtext() {
	return artext;
}
public void setArtext(String artext) {
	this.artext = artext;
}



如果您的配置不是注解形式,而是XML配置,那您在相应的位置添加如下代码即可

<column name="artext" not-null="true" sql-type="LONGTEXT"/> 

[caption id="attachment_1579" align="alignnone" width="561"]Hibernate设置数据库的数据类型为LONGTEXT Hibernate设置数据库的数据类型为LONGTEXT[/caption]


这样我们就设置好了该字段为LOINGTEXT类型


爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img