如果我保存包含以下列表的对象
@OneToMany(cascade=CascadeType.ALL, mappedBy="taskList")
@OrderColumn(name="position", nullable=false)
public List<Task> tasks = new ArrayList<Task>();
Run Code Online (Sandbox Code Playgroud)
我得到了例外
org.hibernate.HibernateException: Found two representations of same collection
Run Code Online (Sandbox Code Playgroud)
Play中的代码!控制器看起来像这样:
TaskList taskList = taskList.findById(taskListId);
taskList.add(position, task);
taskList.save();
Run Code Online (Sandbox Code Playgroud)
如果我taskList.refresh()在此块之前插入它可以工作,但位置信息丢失(这会导致其他错误).
这是一个Hibernate错误还是我的代码有问题?
我正在尝试使用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)