gpt4 book ai didi

java - DbUnit 和递归实体

转载 作者:太空宇宙 更新时间:2023-11-04 14:24:26 24 4
gpt4 key购买 nike

我有一个 Hibernate 实体,它与其自身具有递归关系(父子关系)。我使用 DbUnit XML 文件在测试中插入一些数据,包括关系。

但是,在我的测试中查询parent=null(根)列表的服务上,我也将XML中指定的子项指定为根(也具有parent=null)。

为什么会发生这种情况?

@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames={"parent", "name"}))
public class Entity {

@Id
@Column(name = "id", unique = true)
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Column(name = "name", nullable = false)
private String name;

@ManyToOne
@JoinColumn(name = "parent")
private Entity parent;

@OneToMany(mappedBy = "parent")
private List<Entity> children;

}

以及 XML 数据集文件:

<dataset>
<entity id="1" name="root1" />
<entity id="2" name="root2" />
<entity id="3" name="child" parent="2"/>
</dataset>

在列出根时,我还得到了父属性为 null 的“子”实体。

如果我使用实体实例创建关系并保留它们,它就会起作用。

此外,我还有另一个与不同实体具有多对一关系的实体(无递归),并且使用 DbUnit 数据集 XML 按预期工作。看起来递归实体有一些问题。

最佳答案

问题是,DbUnit 仅考虑 Flat XML 数据集中第一次出现表标记的列名称。因此以下标记中的“父”列被忽略。

但是,由于我需要先插入根文件夹,因此我需要“父”列为空。但在 Flat XML 数据集中,空值是通过省略列来处理的,这与前面的说法相反。

解决方案不是使用 Flat XML 数据集,而是使用普通且更详细的 Xml DataSet,它提供可用于空值列的标记。

关于java - DbUnit 和递归实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26826927/

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