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

Playframework play framework 1中一对多相关对象的持久性,列表中的重复元素,playframework,persistence,playframework-1.x,Playframework,Persistence,Playframework 1.x,我试图理解以下行为: 如果A定义为: @Entity public class A extends Model { @OneToMany(mappedBy = "a") public List<B> bs; } 首先,通过调用以下命令创建的实体: public static void prepare() { A a = new A().save(); } 然后调用以下操作: public static void test() { List<

我试图理解以下行为:

如果A定义为:

@Entity
public class A extends Model {

    @OneToMany(mappedBy = "a")
    public List<B> bs;
}
首先,通过调用以下命令创建的实体:

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
}
(我向添加了一个构造函数来初始化列表,它不会改变上述行为。)


不过,应用哪种行为的规则对我已经有帮助了。

在第一种情况下,您是否在两个单独的(HTTP)请求中运行测试?在这种情况下,可能与事务在第一个事务结束时提交有关。Prepare和test是两个连续调用。提交意味着存储到数据库中,对吗?但我看不到与A的列表的关系。是的,我的意思是存储到数据库中。我怀疑在第一种情况下,在第一次调用中提交了A,并且在第二次调用中使用findAll()加载它后,映射列表B在获取时已经填充了值。但是当我加载A时,它的列表是空的。
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
}
@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
}