将字符串和枚举的集合与 Ebean 映射(Play 2.0)



我在实体中映射字符串和枚举集合时遇到问题。我遵循了不同的建议,但似乎没有任何效果。我正在使用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_foobarbar_strings正在创建的表格。

如果使用 arrayOfString 变量,我在应用程序启动时收到一条奇怪的错误消息(与随机实体有关,不一定是 Foo.class

持久性异常:[models.user.User] 出错,它不是 增强,但它是超级类[类玩.db.ebean.Model]是?(你是 不允许在单个继承层次结构中混合增强( marker[play.db.ebean.Model] className[models.user.User]

我知道我可以将我的字符串和枚举包装在实体中,并使用@ManyToMany关系,但一想到它,我就不寒而栗。Play 2.0 或 Ebean(使用 v2.7.3(中是否有错误?还有其他方法可以解决我的问题吗?

集合映射尚未在 Ebean 中实现。EBEAN-378 您所能做的就是自己实现映射。可以在Foo端使用@PrivateOwned注释,以确保字符串从集合中删除时不会保留在数据库中。

这是 2.0 (链接(中的已知问题,但应在 2.0.1 中修复。

编辑:为了清楚起见,"this"指的是PersistenceException。

最新更新