2012-05-05 41 views
10

Tôi gặp vấn đề khi ánh xạ một Bộ sưu tập các chuỗi và Enums trong các thực thể của tôi. Tôi đã làm theo những lời khuyên khác nhau, nhưng không có gì có vẻ hiệu quả. Tôi đang sử dụng PlayFramework 2.0 và Ebean được cung cấp dưới dạng ORM.Bộ sưu tập bản đồ chuỗi và Enum với Ebean (Play 2.0)

Dưới đây là một lớp học minh họa:

package models; 

import java.util.*; 
import javax.persistence.*; 
import play.db.ebean.Model; 

@Entity 
@Table(name = "foo") 
public class Foo extends Model { 

    private static final long serialVersionUID = 1L; 

    private enum FooBar { 
     FOO, BAR; 
    } 

    @Id 
    public Long id; 

    @ElementCollection 
    @Enumerated(EnumType.STRING) 
    @CollectionTable(name = "bar_foobar", 
     joinColumns = @JoinColumn(name = "bar_id", 
      referencedColumnName = "id")) 
    @Column(name = "foobar") 
    public List<FooBar> fooBars; 

    @ElementCollection(targetClass = String.class) 
    @CollectionTable(name = "bar_strings", 
     joinColumns = @JoinColumn(name = "bar_id")) 
    @Column(name = "string", nullable = false)  
    public List<String> listOfStrings; 

    @Basic 
    public List<String> listOfStrings2; 

    // Attempt to circumvent the issue, but this gives a strange error 
    //public String[] arrayOfString; 
} 

Các tạo DDL vẻ khi ứng dụng được bắt đầu như thế này:

create table foo (
id  bigint not null, 
constraint pk_foo primary key (id)) 
; 

tôi sẽ mong đợi để xem cả các bảng bar_foobarbar_strings được tạo ra, nếu các chú thích là chính xác.

Nếu sử dụng biến arrayOfString, tôi nhận được một lỗi nhắn weired khi khởi động ứng dụng (mà liên quan đến một thực thể ngẫu nhiên, không nhất thiết Foo.class

PersistenceException: Lỗi với [models.user.User] Nó chưa được nâng cấp là nhưng siêu cấp [class play.db.ebean.Model] là? (Bạn là không được phép kết hợp nâng cao trong một hệ thống phân cấp thừa kế đơn lẻ) marker [play.db.ebean.Model] className [models .user.User]

Tôi biết tôi có thể quấn dây và Enums của tôi trong các thực thể, và sử dụng mối quan hệ @ManyToMany, nhưng ý nghĩ về nó khiến tôi rùng mình. Có lỗi ở đây trong Play 2.0 hoặc Ebean (sử dụng v2.7.3) không? Có cách nào khác tôi có thể giải quyết vấn đề của mình không?

Trả lời

0

Đây là sự cố đã biết trong 2.0 (link), nhưng phải được khắc phục trong 2.0.1.

Chỉnh sửa: Để rõ ràng, với 'this' đang đề cập đến PersistenceException.

+0

Cảm ơn bạn đã trả lời. Đó là về PersistenceException, phải không? Tôi đã thực sự cố gắng nâng cấp lên 2.0.1, và có ngoại lệ tương tự sau đó. Nhưng có lẽ tôi cần phải xây dựng dự án từ đầu với 2.0.1 để giải quyết vấn đề này? Câu hỏi chính của tôi là về ánh xạ String/Enum, xin lỗi vì đã thêm câu hỏi thứ hai vào bài đăng. – kvitso

1

Ánh xạ bộ sưu tập chưa được triển khai ở Ebean. EBEAN-378 Tất cả những gì bạn có thể làm là tự mình thực hiện ánh xạ. Chú thích @PrivateOwned có thể được sử dụng ở bên Foo để đảm bảo các Chuỗi không còn trong DB nếu chúng bị xóa khỏi bộ sưu tập.