所以我从sql-server收到error, string or binary data would be truncated
错误。我正在使用hibernate将数据持久化到MS sql-server。
通常当您收到类似这样的错误时,这意味着您要保存的列不足以容纳您尝试插入的数据。
我仔细地开始比较,看看我的BigDecimal
变量中的一个变量是否具有正确的精度,但在花了很多时间之后,我意识到情况并非如此。
事实证明,我在子域中缺少@ManyToOne(optional = false)
。我的父域对象与孩子有one to many
的关系。添加注释为我解决了这个问题。我希望这会帮助有人看到类似的错误。
问题是:为什么数据库在域中缺少ManyToOne注释时会发出数据截断错误?
答案 0 :(得分:3)
因为你没有注释你的字段,所以Hibernate应用默认映射:将字段视为可序列化的对象,一旦序列化,就存储在二进制列中。
序列化产生的字节数组的长度对于列而言太大,因此错误。
答案 1 :(得分:3)
如果未提供annotation
,则Hibernate
将应用默认映射,并将创建数据类型为tinyblob
的列。
这将存储serialize
的{{1}}数据。
entity
:最大长度为255个字节。
一旦TINYBLOB
为Entity
,且数据长度超过255个字节,就会抛出错误
serialized