以树形菜单栏例来讲解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>