エンティティで文字列と列挙型のコレクションをマッピングする際に問題があります。私はさまざまなアドバイスに従いましたが、何もうまくいかないようです。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: Error with [models.user.User] 拡張されていませんが、スーパークラスの [class play.db.ebean.Model] は? (単一の継承階層に拡張機能を混在させることはできません) マーカー[play.db.ebean.Model] className[models.user.User]
Strings と Enums をエンティティでラップし、@ManyToMany 関係を使用できることはわかっていますが、それを考えると身震いします。Play 2.0 または Ebean (v2.7.3 を使用) にバグはありますか? 私の問題を解決できる他の方法はありますか?