Hibernate:组合模式解决树的映射
生活随笔
收集整理的這篇文章主要介紹了
Hibernate:组合模式解决树的映射
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
樹經常用來展示目錄結構,那么在Hibernate中怎樣解決樹的映射問題呢?
先來看一個分銷商的樹形結構的例子
所有分銷商
東北區
遼寧省
沈陽醫藥
吉林省
華北區
北京市
北京醫藥
河北省
華南區
?
那么怎樣用組合模式抽象這一模型呢?
先看下類圖
?
大家都知道樹的存儲可以有兩種方式
雙親存儲
每一個節點都存儲它的直接父節點的地址
孩子存儲
每個節點都存儲它所有直接孩子節點的地址
?
但是在對象模型中,我們既想知道節點的父親是誰又想獲取它的所有孩子節點
那么類圖可以修改如下
?
上圖中,為每個節點都添加了父節點引用,放在Node類中是為了復用
?
上java代碼
?
抽象Node類
public abstract class Node {private String id;private String name;//父節點引用private Node parent;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Node getParent() {return parent;}public void setParent(Node parent) {this.parent = parent;}}?
Client類
?
public class Client extends Node {//分銷商級別private ClientLevel level;public ClientLevel getLevel() {return level;}public void setLevel(ClientLevel level) {this.level = level;}}?
?
Region類
public class Region extends Node {//孩子節點集合,只有區域才有可能有孩子節點private Set children;public Set getChildren() {return children;}public void setChildren(Set children) {this.children = children;}}?
ClientLevel類
?
?
public class ClientLevel {private String id;private String name;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}?
最關鍵的是HBM映射文件
HBM--ClientLevel
?
?
<hibernate-mapping package="com.tgb.hibernate"><class name="ClientLevel" table="t_client_level"><id name="id"><generator class="uuid"/></id><property name="name"/></class></hibernate-mapping>?
?
HBM--Tree
<hibernate-mapping package="com.tgb.hibernate"><class name="Node" abstract="true"><id name="id"><generator class="uuid"/></id><property name="name"/><many-to-one name="parent" column="pid"/><union-subclass name="Region" table="t_region"><set name="children" inverse="true"><key column="pid"/><one-to-many class="Node"/></set></union-subclass> <union-subclass name="Client" table="t_client"><many-to-one name="level"/></union-subclass> </class> </hibernate-mapping>?
這樣就實現了樹形結構的映射。
轉載于:https://www.cnblogs.com/james1207/p/3347797.html
總結
以上是生活随笔為你收集整理的Hibernate:组合模式解决树的映射的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STRUTS2 标签调用静态方法
- 下一篇: 关于session丢失原因的分析