2012-01-16 4 views
5

Как я могу сопоставить массив парных чисел в JPA. У меня есть следующий код, который не работает, потому что спящий режим не может инициализировать массив.JPA Array Mapping

@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 на список.

7

Используйте тип объекта, например ArrayList. Пример

@ElementCollection 
public ArrayList<Double> values; 

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

Вы имеете в виду, что массивы не могут быть сопоставлены непосредственно с jpa, и вместо этого нужно использовать коллекцию? – emt14

+0

@ emt14 Обычные массивы будут настоящей болью в заднице, если у вас есть коллекция значений, которые часто меняются. [Этот вопрос] (http://stackoverflow.com/questions/4332467/mapping-array-with-hibernate) решает ту же проблему, с тем же результатом: используйте коллекцию. – tmbrggmn

+0

Массивы также являются лучшим вариантом хранения для типа данных фиксированной длины. Нет накладных расходов по сравнению с коллекциями. Использование коллекции кажется обходным путем тем фактом, что jpa не сохраняет массивы. – emt14