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

时间:2010-06-17 18:39:37

标签: java sql mysql hibernate

我试图保留包含一些大型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))注释每个字段,已经有效。我正在寻找一种不需要我注释每个领域的解决方案。

1 个答案:

答案 0 :(得分:3)

我认为(没有测试它)Hibernate将生成一个tinyblob,blob,mediumblob列,具体取决于列长度(分别为255,65535,16777215),默认为255.我会尝试指定它(这个将是一个便携式解决方案。)

现在,如果你真的要强迫事情,你将不得不扩展MySQL方言(但这会损害可移植性)。