日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate:组合模式解决树的映射

發布時間:2023/12/18 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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:组合模式解决树的映射的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。