2012-01-16 34 views
5

Làm thế nào tôi có thể ánh xạ một mảng Doubles trong JPA. Tôi có mã sau không thành công vì hibernate không thể khởi tạo mảng.Lập bản đồ JPA Array

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

Trả lời

10

JPA không ủy quyền có thể tiếp tục tồn tại một bảng riêng biệt; rõ ràng là JDO nhưng sau đó bạn đã chọn không sử dụng nó. Do đó, bạn cần lưu trữ chúng dưới dạng @Lob hoặc thay đổi loại java của bạn thành Danh sách.

7

Sử dụng loại đối tượng, chẳng hạn như ArrayList. Ví dụ

@ElementCollection 
public ArrayList<Double> values; 

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

Bạn có nghĩa là mảng không thể ánh xạ trực tiếp với jpa và cần phải sử dụng bộ sưu tập thay thế? – emt14

+0

@ emt14 Mảng đồng bằng sẽ là một nỗi đau thực sự trong ass để làm việc với, nếu bạn có một tập hợp các giá trị thay đổi thường xuyên. [Câu hỏi này] (http://stackoverflow.com/questions/4332467/mapping-array-with-hibernate) giải quyết cùng một vấn đề, với cùng một kết quả: sử dụng một bộ sưu tập. – tmbrggmn

+0

Mảng cũng là tùy chọn lưu trữ tốt nhất cho loại dữ liệu độ dài cố định. Không có chi phí so với bộ sưu tập. Sử dụng bộ sưu tập dường như là một giải pháp thực tế là jpa không tồn tại mảng. – emt14

Các vấn đề liên quan