使用Hibernate存储数组的最佳方式是什么?



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

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

我得到了错误D cannot be cast to java.sql.Blob。(其中double[][]数组这是工程…)所以,我的问题是如何与Hibernate持久化dobule[]数组?

乌利希期刊指南我忘了最重要的事情,抱歉……数组足够大,大约有数千个值(更具体地说是5000-20000个值)。我想使用Blob压缩选项从H2数据库。所以,我需要Lob,而不是List

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

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

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

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

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

  • java.sql。Clob, Character[], char[]和java.lang.String ->作为Clob
  • 保存在数据库中
  • java.sql。Blob, Byte[], Byte[]和serializable类型->作为Blob
  • 在数据库中持久化

你可以创建一个自定义的可序列化类,并使用它来代替

@Entity
class MyEntity {
    @Lob
    DoubleArray data;
}  

public class DoubleArray implements Serializable {
    private double[] data;
    //constructor, getter and setter
}

最新更新