在我的JPA实体中有一个列定义。
@Lob
String message;
当我试图用一些消息持久化我的实体时,我有以下错误。
由: java.sql.SQLException: Java异常引起的:“尝试将CLOB缩小到长度255.:java.sql.SQLException时遇到截断错误” 由: org.apache.derby.iapi.services.io.DerbyIOException:引起,遇到截断错误,试图将CLOB '‘缩小到长度255。
在测试期间,我使用Hibernate 4.2.15完成Apache 10.10.2和模式生成。看起来,列的长度限制在255。如何克服这个错误?
发布于 2014-09-17 00:43:52
Hibernate中的Derby方言使用有限的legth生成列定义:
message clob(255)
您可能希望重写此行为,并设置您自己的长度或保留默认长度。你可以用
@Column(columnDefinition="clob")
@Lob
String message;
记得在德比的时候
没有指定长度的CLOB默认为2G (2,147,483,647)
发布于 2019-01-17 15:14:39
这被认为是Hibernate、https://hibernate.atlassian.net/browse/HHH-7264和https://hibernate.atlassian.net/browse/HHH-1501中的一个bug,但它不会像看起来那样被修复。
Hibernate在确定要用于省略指定属性的Hibernate类型时,不考虑长度/比例/精度,也不考虑方言。它所做的就是仅仅基于Java类型来选择一个默认的
所有Derby方言(DB2Dialect)的基类都这样做:
registerColumnType( Types.CLOB, "clob($l)" );
您可以挂钩声明Hibernate DialectResolver,它可以执行如下操作:
private class DerbyTenSevenDialectWithClob extends DerbyTenSevenDialect {
public DerbyTenSevenDialectWithClob() {
super();
registerColumnType( Types.CLOB, "clob" );
}
}
我刚刚验证了使用Hibernate 5.3.7和Derby 10.12.1.1
https://stackoverflow.com/questions/25885992
复制相似问题