一對多雙向自關聯查詢
阿新 • • 發佈:2018-12-17
以樹形選單欄例來講解Hibernate的中一對多雙向自關聯,實體類如下:
package com.zking.five.entity; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class TreeNode { private Integer treeNodeId; private String treeNodeName; private Integer treeNodeType; private Integer position; private String url; // private Set<TreeNode> Children=new HashSet<TreeNode>(); //無序排列 private List<TreeNode> Children = new ArrayList(); //有序排列 private Integer initChildren = 0; public Integer getTreeNodeId() { return treeNodeId; } public void setTreeNodeId(Integer treeNodeId) { this.treeNodeId = treeNodeId; } public String getTreeNodeName() { return treeNodeName; } public void setTreeNodeName(String treeNodeName) { this.treeNodeName = treeNodeName; } public Integer getTreeNodeType() { return treeNodeType; } public void setTreeNodeType(Integer treeNodeType) { this.treeNodeType = treeNodeType; } public Integer getPosition() { return position; } public void setPosition(Integer position) { this.position = position; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public List<TreeNode> getChildren() { return Children; } public void setChildren(List<TreeNode> children) { Children = children; } // public Set<TreeNode> getChildren() { // return Children; // } // public void setChildren(Set<TreeNode> children) { // Children = children; // } public Integer getInitChildren() { return initChildren; } public void setInitChildren(Integer initChildren) { this.initChildren = initChildren; } }
TreeNode.hbm.xml配置檔案
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class table="t_hibernate_sys_tree_node" name="com.zking.five.entity.TreeNode"> <id name="treeNodeId" type="java.lang.Integer" column="tree_node_id"> <generator class="increment"></generator> </id> <property name="treeNodeName" type="java.lang.String" column="tree_node_name"></property> <property name="treeNodeType" type="java.lang.Integer" column="tree_node_type"></property> <property name="position" type="java.lang.Integer" column="position"></property> <property name="url" type="java.lang.String" column="url"></property> <!-- <set name="Children" cascade="save-update" inverse="true" > <key column="parent_node_id"></key> <one-to-many class="com.zking.five.entity.TreeNode"/> </set> --><!--無序排列 --> <!-- order-by:裡面填的不是實體類的屬性,填的是表的列欄位 --> <bag order-by="position" name="Children" cascade="save-update" inverse="true"> <key column="parent_node_id"></key> <one-to-many class="com.zking.five.entity.TreeNode" /> </bag> <!--有序排列 --> </class> </hibernate-mapping>