gpt4 book ai didi

java - Ebean 中仍然存在多级级联

转载 作者:行者123 更新时间:2023-12-01 19:42:18 25 4
gpt4 key购买 nike

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

我的模型类:

@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 增强的 setter 的情况下设置集合,也会出现这些相同的症状。我在使用公共(public)字段和 play enhancer 时遇到了一些问题.

关于java - Ebean 中仍然存在多级级联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59164545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com