我想了解以下行为:
如果A定义为:
@Entity
public class A extends Model {
@OneToMany(mappedBy = "a")
public List<B> bs;
}
和B as:
@Entity
public class B extends Model {
@ManyToOne
public A a;
public B(A a) {
this.a = a;
}
}
首先,通过调用:
创建A的实体public static void prepare() {
A a = new A().save();
}
然后调用以下操作:
public static void test() {
List<A> as = A.findAll();
A a = as.get(0);
B b = new B(a).save();
a.bs.add(b);
System.out.println(a.bs.size()); // ==> 2
}
输出为2(因为B现在是A列表中的两倍)。很明显,当B与A上的引用一起保存时,A的列表已经更新。这究竟是怎么发生的?以下测试有什么不同:
@Test
public void aVeryImportantThingToTest() {
A a = new A().save();
B b = new B(a).save();
a.bs.add(b);
System.out.println(a.bs.size()); // ==> 1
}
(我在A中添加了一个Contructor来初始化列表,它不会改变上面的行为。)
尽管如此,应用哪种行为的规则对我有帮助。