gpt4 book ai didi

java - 在 Hibernate 中持久化可序列化对象

转载 作者:可可西里 更新时间:2023-11-01 08:22:35 26 4
gpt4 key购买 nike

我正在尝试保留包含一些大型 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com