Hibernate处理数据关系 - 自我关联映射

Hibernate自我关联映射

例如在设计菜单的过程中,往往会将一个项抽象成为一个node对象,一个node对象可能拥有一个父node对象和多个子node对象。这样从宏观来看,就是典型的自我关联映射。

实现过程

- Node.java

package com.java1234.hibernate.model;

import java.util.Set;

public class Node {

	private int id;
	private String name;
	
	//1个父节点
	private Node parent;
	
	//多个子节点
	private Set<Node> childNodes;

	public int getId() {
		return id;
	}

	public void setId(int 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) {
		parent = parent;
	}

	public Set<Node> getChildNodes() {
		return childNodes;
	}

	public void setChildNodes(Set<Node> childNodes) {
		this.childNodes = childNodes;
	}
	
}

- node.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 name="com.java1234.hibernate.model.Node" table="tb_node">
    		<id name="id" column="nodeId" type="int">
    			<generator class="native"/>
    		</id>
    		<property name="name" column="nodeName"/>
    		
    		<!-- 1:n,一个父节点对应多个子节点。parentId:nodeId=1:n -->
    		<many-to-one name="parent" column="parentId" cascade="save-update" class="com.java1234.hibernate.model.Node"/>
    		
    		<!-- n:1,nodeId:childId=1:n -->
    		<set name="childNodes"  cascade="save-update">
    			<key column="childId"/>
    			<one-to-many class="com.java1234.hibernate.model.Node"/>
    		</set>
    	
    	</class>
    
    </hibernate-mapping>

生成的表结构

此过程中所执行的SQL语句

Hibernate: create table tb_node (nodeId integer not null auto_increment, nodeName varchar(255), parentId integer, childId integer, primary key (nodeId))
Hibernate: alter table tb_node add constraint FK_3aq8anhuwxcseocmsxmh4d0af foreign key (parentId) references tb_node (nodeId)
Hibernate: alter table tb_node add constraint FK_wj3wh29tcgwbqcxsg5tr559k foreign key (childId) references tb_node (nodeId)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值