我想在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
}