2012-01-16 141 views
5

如何在JPA中映射雙精度數組。 我有以下代碼失敗,因爲休眠無法初始化數組。JPA陣列映射

@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]; 
    } 
} 

回答

10

JPA沒有要求能夠將數組保存到單獨的表;顯然,JDO的確如此,但是你選擇不使用它。因此,您需要將它們存儲爲@Lob,或將您的java類型更改爲List。

7

使用Object類型,例如ArrayList。示例

@ElementCollection 
public ArrayList<Double> values; 

public YearlyTarget(int year) { 
    this.year = year; 
    this.values = new ArrayList<Double>(12); 
} 
+0

你的意思是說數組不能直接用jpa進行映射,而是需要使用集合呢? – emt14 2012-01-16 07:14:09

+0

@ emt14如果您有一組頻繁更改的值,那麼平淡無奇的數組將會是一個非常痛苦的工作。 [這個問題](http://stackoverflow.com/questions/4332467/mapping-array-with-hibernate)解決同樣的問題,結果相同:使用集合。 – tmbrggmn 2012-01-16 07:25:50

+0

數組也是固定長度數據類型的最佳存儲選項。與收藏相比沒有開銷。使用集合似乎是一個解決方法,即jpa不會持久化數組。 – emt14 2012-01-16 07:30:19