2012-05-05 11 views
10

Mam problemy z odwzorowaniem kolekcji ciągów i wyliczeń w moich jednostkach. Śledziłem różne porady, ale nic nie działa. Używam PlayFramework 2.0 i dostarczonego Ebean jako ORM.Mapowanie kolekcji ciągów i enumów z Ebean (Play 2.0)

Oto klasa ilustracji:

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

Wygenerowany DDL po uruchomieniu aplikacji wygląda następująco:

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

Spodziewam się, aby zobaczyć oba stoły bar_foobar i bar_strings tworzone, jeśli adnotacje były poprawne.

Jeśli użyciu zmiennej arrayOfString, dostaję weired Komunikat błędu po uruchomieniu aplikacji (który dotyczył losowej podmiot, niekoniecznie Foo.class

PersistenceException: Błąd z [models.user.User] Nie został ulepszony, ale jest to superClass [klasa play.db.ebean.Model] to? (Nie można mieszać ulepszeń w jednej hierarchii dziedziczenia) znacznik [play.db.ebean.Model] className [modele .user.User]

Wiem, że mogłem owijać moje Struny i Enumy w byty i używać relacji @ManyToMany, ale myśl o tym sprawia, że ​​drżę. Czy jest tu błąd w Play 2.0 lub Ebean (używając v2.7.3)? Czy są inne sposoby na rozwiązanie mojego problemu?

Odpowiedz

0

Jest to znany problem w wersji 2.0 (link), ale powinien zostać naprawiony w wersji 2.0.1.

Edycja: Dla jasności określenie "this" odnosiło się do wyjątku PersistenceException.

+0

Dziękuję za odpowiedź. To dotyczy wyjątku PersistenceException, prawda? Naprawdę próbowałem aktualizacji do wersji 2.0.1 i otrzymałem ten sam wyjątek po tym. Ale może muszę zbudować projekt od zera 2.0.1, aby to rozwiązać? Moje główne pytanie dotyczyło mapowania String/Enum, przepraszam za dodanie drugiego pytania do postu. – kvitso

1

Mapowanie kolekcji nie jest jeszcze zaimplementowane w środowisku Ebean. EBEAN-378 Wszystko, co możesz zrobić, to implementować mapowanie siebie. Adnotację @PrivateOwned można zastosować po stronie Foo, aby upewnić się, że ciągi nie pozostają w DB, jeśli zostaną usunięte z kolekcji.

Powiązane problemy