我正在尝试使用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)