我用Hibernate / JPA得到“错误,字符串或二进制数据会被截断”

时间:2014-08-21 16:21:06

标签: java sql sql-server hibernate jpa

所以我从sql-server收到error, string or binary data would be truncated错误。我正在使用hibernate将数据持久化到MS sql-server。

通常当您收到类似这样的错误时,这意味着您要保存的列不足以容纳您尝试插入的数据。

我仔细地开始比较,看看我的BigDecimal变量中的一个变量是否具有正确的精度,但在花了很多时间之后,我意识到情况并非如此。

事实证明,我在子域中缺少@ManyToOne(optional = false)。我的父域对象与孩子有one to many的关系。添加注释为我解决了这个问题。我希望这会帮助有人看到类似的错误。

问题是:为什么数据库在域中缺少ManyToOne注释时会发出数据截断错误?

2 个答案:

答案 0 :(得分:3)

因为你没有注释你的字段,所以Hibernate应用默认映射:将字段视为可序列化的对象,一旦序列化,就存储在二进制列中。

序列化产生的字节数组的长度对于列而言太大,因此错误。

答案 1 :(得分:3)

如果未提供annotation,则Hibernate将应用默认映射,并将创建数据类型为tinyblob的列。

这将存储serialize的{​​{1}}数据。

entity:最大长度为255个字节。

一旦TINYBLOBEntity,且数据长度超过255个字节,就会抛出错误

serialized