相关疑难解决方法(0)

HibernateException:找到同一集合的两个表示

如果我保存包含以下列表的对象

@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错误还是我的代码有问题?

java hibernate jpa playframework

9
推荐指数
1
解决办法
3万
查看次数

在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 ×2

java ×2

playframework ×2

jpa ×1