如何在JPA中映射双打数组。 我有以下代码失败,因为hibernate无法初始化数组。
@Entity
public class YearlyTarget extends GenericModel {
@Id
public Integer year;
@ElementCollection
public Double[] values;
public YearlyTarget(int year) {
this.year = year;
this.values = new Double[12];
}
}
答案 0 :(得分:10)
JPA不强制要求将数组持久化到单独的表中;显然JDO确实如此,但之后你选择不使用它。因此,您需要将它们存储为@Lob,或将您的java类型更改为List。
答案 1 :(得分:7)
使用Object类型,例如ArrayList。实施例
@ElementCollection
public ArrayList<Double> values;
public YearlyTarget(int year) {
this.year = year;
this.values = new ArrayList<Double>(12);
}
答案 2 :(得分:0)
您没有指定支持映射所需的数据库结构。 @ElementCollection
依赖于在检索集合时联合的表。
例如,在Postgresql数据库中,您可以将一个简单数组存储在可以映射的列中。您需要添加dependency:
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-52</artifactId>
</dependency>
您的实体定义如下:
@Entity
@Table(name = "products")
@TypeDefs(@TypeDef(name = "string-array", typeClass = StringArrayType.class))
public class Product {
@Type(type = "string-array" )
@Column(name = "colours")
private String[] colours;
}
目前,该库仅支持整数和字符串,但添加新类型是一项相当简单的任务。