我的JPA实体中有一个列定义。
@Lob
String message;
当我尝试使用某些消息保留我的实体时,我遇到以下错误。
引起:java.sql.SQLException:Java异常:'尝试将CLOB'缩小到255时遇到截断错误:org.apache.derby.iapi.services.io.DerbyIOException'。
引起:org.apache.derby.iapi.services.io.DerbyIOException:尝试将CLOB''缩小到255时遇到截断错误。
我正在使用Hibernate 4.2.15.Final与Apache Derby 10.10.2以及测试期间的模式生成。看起来列的长度限制为255.如何克服此错误?
答案 0 :(得分:5)
Hibernate中的Derby方言生成具有有限legth的列定义:
message clob(255)
您可能希望覆盖此行为并设置自己的长度或保留默认长度。你可以使用
@Column(columnDefinition="clob")
@Lob
String message;
请记住,在德比中
没有指定长度的CLOB默认为2千兆字节(2,147,483,647)
答案 1 :(得分:0)
这在Hibernate https://hibernate.atlassian.net/browse/HHH-7264和https://hibernate.atlassian.net/browse/HHH-1501中被视为错误,但看上去并不会得到解决。
休眠模式不考虑长度/比例/精度 确定属性使用的休眠类型时的方言 省略了指定一个。它的作用是基本上选择一个 默认仅基于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
答案 2 :(得分:0)
我遇到了同样的问题,这是 hibernate-core-4.2.7 和 Derby 的解决方案:
如果创建字符串列,它们将变为VARCHAR(255)
@Column()
private String userName;
但是您可以通过以下操作增加长度,例如将其增加到1000个字符:
@Column(length = 1000)
private String description;
PS:我不得不删除/删除旧表以强制创建具有正确大小的新表,还需要在 @Column 界面中进行查看,其中有一些有用的东西,例如唯一,可修改,可更新