小编kal*_*rzo的帖子

在Play中使用Map作为模型的属性

我正在尝试使用Map作为我的一个模型属性的类型.我们以这两个类为例:

@Entity
public class Foo extends Model {

    @OneToMany(mappedBy = "foo", cascade = CascadeType.ALL)
    @MapKey(name = "name")
    public Map<String, Bar> bars;

    public String name;

}

@Entity
public class Bar extends Model {

    @ManyToOne
    public Foo foo;

    public String name;
}
Run Code Online (Sandbox Code Playgroud)

当然非常简化,但这是基本的想法.所以我想要实现的是获取一个带有Bars作为值的地图,并将名称作为Foo的键.

现在我想利用Fixture从这个YAML文件加载一些数据:

Foo(foo1):
    name: Foo1

Foo(foo2):
    name: Foo2

Bar(bar1):
    name: Bar1
    foo: foo1

Bar(bar2):
    name: Bar2
    foo: foo1
Run Code Online (Sandbox Code Playgroud)

到目前为止没有任何问题,这就像一个魅力.现在,如果我尝试将bar2更改为foo: foo2,我会得到以下异常:

play.exceptions.JavaExecutionException: Cannot load fixture initial-data.yml: org.hibernate.HibernateException: Found two representations of same collection: models.Foo.bars
    at play.jobs.Job.call(Job.java:166)
    at Invocation.Job(Play!)
Caused …
Run Code Online (Sandbox Code Playgroud)

java hibernate playframework

7
推荐指数
1
解决办法
1328
查看次数

标签 统计

hibernate ×1

java ×1

playframework ×1