Ebean 中存在多级级联

Multiple levels of cascading persists in Ebean

我有一个模型 class,它定义了属于相同 class 模型的子项列表。将一个新对象与一些初始子项保持在一起很好,但是当我有两个或更多级别的子项时,Ebean 似乎无法很好地处理它。这似乎出乎意料,所以我担心我犯了一个错误。同时我找不到任何关于多级持续级联的例子或提及所以我的问题是: 我的代码中是否有错误,这是受支持的功能还是我发现了错误?

我的模型class:

@Entity
public class TestEntity extends Model {
    @Id
    private int id;
    private String text;
    @ManyToOne
    private TestEntity parentEntity;
    @OneToMany(cascade = CascadeType.ALL)
    private List<TestEntity> childEntities;
...
}

我的程序:


TestEntity grandparent = new TestEntity();
grandparent.setText("grandparent");
TestEntity parent = new TestEntity();
parent.setText("parent");
TestEntity child = new TestEntity();
child.setText("child");
grandparent.setChildEntities(Collections.singletonList(parent));
parent.setChildEntities(Collections.singletonList(child));
grandparent.save();

我为 sql 语句添加了日志记录,很明显第三次插入没有获得 parent_entity_id 的正确值。由于 0 不是有效的外键,该行失败并且批处理被还原。

insert into test_entity (text, parent_entity_id) values ('grandparent',null);
insert into test_entity (text, parent_entity_id) values ('parent',1);
insert into test_entity (text, parent_entity_id) values ('child',0);

我正在使用 Play 框架 2.7.3 和 ebean 插件版本 5.0.2 和 Ebean 版本 11.39

这确实是一项受支持的功能,上面的代码片段预计会保留所有三个实体。 有一个 unit test added 来验证这在最新版本的 ebean 中是否正常工作。

在play框架目前支持的最新版本ebean 11.39中测试失败。使用该版本时的一个简单解决方法是使用 Long 而不是原始 int 作为模型的 ID。

虽然不是这个特定问题的答案,但最好注意,如果在不使用 ebean 增强的设置器的情况下设置集合,也会出现这些相同的症状。我在使用 public 字段和 play enhancer .

时遇到了一些问题