最好使用Nested sets作为分层数据。但在此设计中,如果删除或插入一些数据,则应始终计算右侧和左侧节点。此外,您没有任何外国钥匙。
我如何用JPA反映这个模型?有可能吗?
答案 0 :(得分:0)
我认为即使使用RIGHT和LEFT,你仍然需要PARENT_ID,否则父/子查询效率低下,或者我甚至不确定是否可能。
您可以在应用程序/模型中或通过PrePersist / PreUpdate / PreRemove事件更新RIGHT和LEFT值。
另一种选择是使用爆炸表。为此,您只需要添加一个使用ManyToMany连接表的allChildren关系。将子项添加到任何节点时,只需将子项添加到其所有父项。
另一种选择是在数据库中使用分层查询,例如Oracle中的CONNECT BY子句。