我正在尝试保留包含一些大型 Serializable
类型的对象。我希望 Hibernate 自动生成我的 DDL(使用 Hibernate 注释)。在大多数情况下,这是有效的,但是 Hibernate 在持久化这些类型时使用的默认数据库列类型是 tinyblob
。不幸的是,这会在尝试保留我的类时导致崩溃,因为这些类型不适合 tinyblob
的长度。
但是,如果我手动设置类型(使用 @Column(columnDefinition="longblob")
,或者更便携的 @Column(length=500000)
),它工作正常。有什么方法可以使默认二进制类型 longblob
而不是 tinyblob
,这样我就不需要手动指定 @Column
注释在每个领域?
示例类.java:
public class ExampleClass
{
@Column(columnDefinition="longblob")
ExampleSerializable ser1;
@Column(columnDefinition="longblob")
ExampleSerializable ser2;
...
}
ExampleSerializable.java:
public class ExampleSerializable implements java.io.Serializable
{
// MANY Fields
}
编辑
因为似乎有些困惑:用 @Column(columnDefinition="longblob")
注释每个字段(或者更便携:@Column(length=500000)
), 已经有效。我正在寻找一种不需要我注释每个字段的解决方案。
最佳答案
我认为(没有测试)Hibernate 会根据默认为 255 的列长度(分别为 255、65535、16777215)生成 tinyblob、blob、mediumblob 列。我会尝试指定它(和这个将是一个可移植解决方案)。
现在,如果您真的想强制执行某些操作,则必须扩展 MySQL 方言(但这会损害可移植性)。
关于java - 在 Hibernate 中持久化可序列化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3064530/