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

标签 java sql mysql hibernate

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

相关文章:

java - 所有验证消息都可以在带注释驱动的 hibernate 验证中看到

java - 什么是最佳 scrypt 工作因素?

html - person "Name"字段的合理长度限制是多少?

sql - Postgres 选择时间范围前后是否存在另一个事件

php - UTF-8贯穿始终

java - 延迟处理直到 GUI 输入

java - VisualVM 采样器中分配的总内存是多少

java - getSingleResult() 改变 count() 查询

php - 为什么在定义 MySQL 查询后就停止了?

mysql - 我使用哪种 JOIN 类型来显示此查询中的 NULL 值?