gpt4 book ai didi

java - 如何使用 JPA 填充闭包表?

转载 作者:行者123 更新时间:2023-11-30 08:56:31 29 4
gpt4 key购买 nike

我正在尝试为数据库中的对象(实际上是域组)层次结构建模。我决定使用闭包表,这样我就可以在查询层次结构时获得高度的灵 active 。基本上,我的架构看起来像这样:

CREATE TABLE group (
id INT -- primary key
... -- other fields here
)

CREATE TABLE groupHierarchy (
idAncestor INT,
idGroup INT,
hierarchyLevel INT
)

因此,当 ID 为 1 的组包含一个 ID 为 2 的组,而该组又包含一个 ID 为 3 的组时,我将需要在 groupHierarchy 表中包含以下行。

idAncestor  idGroup  hierarchyLevel
1 1 0
2 2 0
3 3 0
1 2 1
2 3 1
1 3 2

我也可以接受没有 hierarchyLevels 为 0 的行(自引用)。

现在我想要一个映射到组表的 JPA 实体。我的问题是 - 管理 groupHierarchy 表的好方法是什么?

我已经考虑过的是:

1) 将组层次结构映射为元素集合,例如:

@ElementCollection
@JoinTable(name = "groupHierarchy")
@MapKeyJoinColumn(name = "idAncestor")
@Column(name = "hierarchyLevel")
Map<Group, Integer> ancestors;

这需要在应用程序中完全处理层次结构,恐怕这会变得非常复杂。

2) 让应用程序不知道 hierarchyLevel 列并使用触发器在数据库中处理它(添加记录时,检查父级是否已经有祖先,如果有,添加任何其他需要的行。这也是在哪里hierarchyLevel 为 0 会派上用场)。在我看来,数据库触发器会更简单,但我不确定这是否有利于整体可读性。

有人可以建议其他选择吗?或者指出我提到的解决方案的优缺点?

最佳答案

我可以建议您使用 JpaTreeDao ?我认为它是完整的并且有很好的记录。我将尝试将闭包表代码移植到常规实现中...

关于java - 如何使用 JPA 填充闭包表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28570822/

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