【问题标题】:Persisting Serializable Objects in Hibernate在 Hibernate 中持久化可序列化对象
【发布时间】:2011-03-05 02:51:51
【问题描述】:

我正在尝试持久化包含一些大型 Serializable 类型的对象。我希望 Hibernate 自动生成我的 DDL(使用 Hibernate 注释)。在大多数情况下,这是可行的,但是 Hibernate 在持久化这些类型时使用的默认数据库列类型是tinyblob。不幸的是,这会在尝试持久化我的课程时导致崩溃,因为这些类型不适合tinyblob 的长度。

但是,如果我手动设置类型(使用@Column(columnDefinition="longblob"),或者更便携的@Column(length=500000)),它可以正常工作。有没有办法让默认的二进制类型longblob代替tinyblob,这样就不用在每个字段上手动指定@Column注解了?

ExampleClass.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))注释每个字段,已经可以了。我正在寻找一种不需要我注释每个字段的解决方案。

【问题讨论】:

    标签: java sql mysql hibernate


    【解决方案1】:

    我认为(没有测试过)Hibernate 会根据默认为 255 的列长度(分别为 255、65535、16777215)生成一个 tinyblob、blob、mediumblob 列。我会尝试指定它(还有这个将是一个便携式解决方案)。

    现在,如果您真的想强制执行某些操作,则必须扩展 MySQL 方言(但这会损害可移植性)。

    【讨论】:

    • 有没有办法指定默认的列长度?必须为每个成员指定列长度并不比必须在每个成员上指定longblob 更容易。
    • @VeeArr:它可能并不容易,但它是可移植的(longblob 可能不存在于另一个数据库中)。关于Column 的长度,此默认值由JPA 规范定义,修补persistence-api.jar 不是一个好建议。我不是故意粗鲁,但我认为你期待太多的魔法。
    • 啊,是的,我理解你的观点,它更便携(因此比我原来的解决方案更好)。不过,我正在解决它没有解决我的问题的问题。不过感谢您的回复!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    相关资源
    最近更新 更多