【发布时间】:2014-06-07 15:59:18
【问题描述】:
每当我尝试在模型中将多个 @ManyToMany 属性与 CascadeType.ALL 一起使用时,我都会遇到 Ebean(版本 3.2.2)的奇怪行为。
我做了一个简化的例子来重现这个问题:
我有以下两个实体(getter 省略)
@Entity
public class Foo extends Model {
@Id
@GeneratedValue
private Long id;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "foo_bar1")
private List<Bar> bars1;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "foo_bar2")
private List<Bar> bars2;
public void addBar1(Bar bar1) {
bars1.add(bar1);
}
public void addBar2(Bar bar2) {
bars2.add(bar2);
}
}
和
@Entity
public class Bar extends Model {
@Id
@GeneratedValue
private Long id;
private String name;
@ManyToMany(mappedBy = "bars1")
private List<Foo> foos1;
@ManyToMany(mappedBy = "bars2")
private List<Foo> foos2;
public Bar(String name) {
this.name = name;
}
}
但每当我执行以下测试时,它都会导致奇怪的行为
@Test
public void cascadeTest() {
Ebean.beginTransaction();
Foo foo = new Foo();
Bar bar1 = new Bar("bar1");
Bar bar2 = new Bar("bar2");
foo.addBar1(bar1);
foo.addBar2(bar2);
Ebean.save(foo);
Ebean.commitTransaction();
}
因为Foo.bars2 中的值没有被持久化(例如foo.getBars2().size() == 0)。
Ebean 生成以下 SQL 查询
insert into foo (id) values (1)
insert into bar (id, name) values (1,'bar1')
insert into foo_bar1 (foo_id, bar_id) values (1, 1)
insert into bar (id, name) values (2,'bar2')
没有所需的insert into foo_bar2 (foo_id, bar_id) values (1, 2) 查询。
有人知道这里发生了什么吗?
【问题讨论】:
标签: java playframework playframework-2.0 many-to-many ebean