У меня проблемы с отображением коллекции строк и имен в моих сущностях. Я придерживался разных советов, но ничего не работает. Я использую PlayFramework 2.0 и предоставленную Ebean как ORM.
Вот класс иллюстрации:
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;
}
Сгенерированный DDL при запуске приложения выглядит следующим образом:
create table foo (
id bigint not null,
constraint pk_foo primary key (id))
;
Я ожидаю, что будут созданы обе таблицы bar_foobar
и bar_strings
, если аннотации были правильными.
Если используется переменная arrayOfString
, я получаю сообщение об ошибке при запуске приложения (которое связано со случайным объектом, а не с Foo.class
PersistenceException: ошибка с [models.user.User] Это не было но это суперкласс [класс play.db.ebean.Model]? (Вы не допускается смешивать улучшения в одной иерархии наследования) marker [play.db.ebean.Model] className [models.user.User]
Я знаю, что могу объединить свои строки и перечисления в сущности и использовать отношения @ManyToMany, но мысль об этом заставляет меня дрожать. Есть ли ошибка в Play 2.0 или Ebean (с использованием v2.7.3)? Есть ли другие способы решить мою проблему?