play框架1中一对多相关对象的持久性,列表中的重复元素

时间:2015-04-21 01:51:30

标签: playframework persistence playframework-1.x

我想了解以下行为:

如果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来初始化列表,它不会改变上面的行为。)

尽管如此,应用哪种行为的规则对我有帮助。

0 个答案:

没有答案