使用Hibernate的商店数组的最佳方法是什么?

时间:2016-09-03 15:19:32

标签: java arrays hibernate

我希望将double[]数组作为Blob存储在具有Hibernate的数据库中。但是当我将该属性标记为Lob时,就像这样:

@Entity
class MyEntity {
    @Lob
    double[] data;
}  

我收到错误D cannot be cast to java.sql.Blob。 (其中对于double[][]数组这是有效的...)所以,我的问题是如何使用Hibernate来持久化dobule[]数组?

UPD 我忘记了主要的事情,对不起......数组足够大,数千个值(更具体的5000-20000值)。我想使用Blob数据库中的H2压缩选项。所以,我需要Lob,而不是List

UPD2 另一个细节,它是只读数组。

2 个答案:

答案 0 :(得分:0)

在我看来,使用@ElementCollection并让Hibernate处理优化是最好的:

@Entity
class MyEntity {
    @ElementCollection
    List<Double> data;
}  

https://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-collection

答案 1 :(得分:0)

@Lob 注释不支持 double [] 类型。 @Lob 支持的类型包括:

  • java.sql.Clob,Character [],char []和java.lang.String - &gt;以 Clob
  • 的形式保存在数据库中
  • java.sql.Blob,Byte [],byte []和可序列化类型 - &gt;以 Blob
  • 的形式保存在数据库中

您可以做的是创建一个自定义的可序列化类并改为使用它

@Entity
class MyEntity {
    @Lob
    DoubleArray data;
}  



public class DoubleArray implements Serializable {

    private double[] data;

    //constructor, getter and setter

}