1. 程式人生 > >一對多雙向自關聯查詢

一對多雙向自關聯查詢

以樹形選單欄例來講解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>