Hibernate:组合模式解决树的映射
树经常用来展示目录结构,那么在Hibernate中怎样解决树的映射问题呢?
所有分销商
东北区
辽宁省
沈阳医药
吉林省
华北区
北京市
北京医药
河北省
华南区
那么怎样用组合模式抽象这一模型呢?
先看下类图
大家都知道树的存储可以有两种方式
双亲存储
每一个节点都存储它的直接父节点的地址
孩子存储
每个节点都存储它所有直接孩子节点的地址
但是在对象模型中,我们既想知道节点的父亲是谁又想获取它的所有孩子节点
那么类图可以修改如下
上图中,为每个节点都添加了父节点引用,放在Node类中是为了复用
上java代码
抽象Node类
Client类Region类ClientLevel类
最关键的是HBM映射文件HBM--ClientLevel
<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>这样就实现了树形结构的映射。