JPA数组映射

时间:2012-01-16 06:59:11

标签: java hibernate jpa playframework

如何在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];
    }
}

3 个答案:

答案 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;

}

目前,该库仅支持整数和字符串,但添加新类型是一项相当简单的任务。