Apo*_*psa 5 java sql-server jpa
我正在尝试对数据库中的对象层次结构(实际上是域组)进行建模。我决定使用闭包表,这样我就可以在查询层次结构时获得高度灵活性。基本上,我的架构看起来像这样:
CREATE TABLE group (
id INT -- primary key
... -- other fields here
)
CREATE TABLE groupHierarchy (
idAncestor INT,
idGroup INT,
hierarchyLevel INT
)
Run Code Online (Sandbox Code Playgroud)
因此,当 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
Run Code Online (Sandbox Code Playgroud)
我也可以接受没有 hierarchyLevels 为 0 的行(自引用)。
现在我想要一个映射到组表的 JPA 实体。我的问题是 - 管理 groupHierarchy 表的好方法是什么?
我已经考虑的是:
1)将组层次结构映射为元素集合,例如:
@ElementCollection
@JoinTable(name = "groupHierarchy")
@MapKeyJoinColumn(name = "idAncestor")
@Column(name = "hierarchyLevel")
Map<Group, Integer> ancestors;
Run Code Online (Sandbox Code Playgroud)
这需要完全在应用程序中处理层次结构,而且恐怕这可能会变得非常复杂。
2)使应用程序不知道hierarchyLevel列并使用触发器在数据库中处理它(当添加记录时,检查父级是否已经有祖先,如果有,则添加任何其他所需的行。这也是hierarchyLevel的所在0 会派上用场)。在我看来,数据库触发器会更简单,但我不确定这是否有利于整体可读性。
谁能建议其他选择?或者指出我提到的解决方案的优点或缺点?
| 归档时间: |
|
| 查看次数: |
2535 次 |
| 最近记录: |