Hibernate5入门(四)映射之自身关联

目录

一、实体类Menu.java

二、映射文件Menu.hbm.xml

三、测试类


 

学习笔记,为了加强记忆和深入理解在此记录备忘。如有错误和理解不当之处,还望指正。万分感谢!

另外,实例和内容有些是参照网络其他博文,如有侵权可联系删掉。


以菜单为例介绍自关联一对多,父菜单对应多个子菜单。

一、实体类Menu.java

package demo.entity;

import java.util.HashSet;
import java.util.Set;

public class Menu {

	private int menuId;
	private String menuName;
	// 菜单和子菜单是一对多,这了引入父类对象
	private Menu parentMenu;
	// 这里引入子类对象集合
	private Set<Menu> childMenus = new HashSet<>();
	
	public int getMenuId() {
		return menuId;
	}
	public void setMenuId(int menuId) {
		this.menuId = menuId;
	}
	public String getMenuName() {
		return menuName;
	}
	public void setMenuName(String menuName) {
		this.menuName = menuName;
	}
	public Menu getParentMenu() {
		return parentMenu;
	}
	public void setParentMenu(Menu parentMenu) {
		this.parentMenu = parentMenu;
	}
	public Set<Menu> getChildMenus() {
		return childMenus;
	}
	public void setChildMenus(Set<Menu> childMenus) {
		this.childMenus = childMenus;
	}
}

二、映射文件Menu.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-7-31 16:16:18 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="demo.entity.Menu" table="t_menu">
        <id name="menuId" type="int">
            <column name="menuId" />
            <generator class="native" />
        </id>
        <property name="menuName" type="java.lang.String">
            <column name="menuName" />
        </property>
        <many-to-one name="parentMenu" class="demo.entity.Menu" column="parentId" />  
        <set name="childMenus"  cascade="all">  
            <key column="parentId" />  
            <one-to-many class="demo.entity.Menu" />  
        </set>  
    </class>
</hibernate-mapping>

三、测试类

package demo.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import demo.entity.Menu;

class JunitTest {

	private Configuration configuration = new Configuration().configure();
	private SessionFactory sFactory = configuration.buildSessionFactory();
	private Session session = null;
	private Transaction transaction = null;
	@BeforeEach
	void setUp() throws Exception {
		session = sFactory.openSession();
		transaction = session.beginTransaction();
	}

	@AfterEach
	void tearDown() throws Exception {
		transaction.commit();
		session.close();
	}
	
	@Test
	public void Menutest() {
		
		Menu menu = new Menu();
		menu.setMenuName("根节点");
		
		Menu menu1 = new Menu();
		menu1.setMenuName("一级菜单");
		menu1.setParentMenu(menu);
		
		Menu childMenu1 = new Menu();
		childMenu1.setMenuName("一级菜单1子菜单1");
		childMenu1.setParentMenu(menu1);
		
		Menu childMenu2 = new Menu();
		childMenu2.setMenuName("一级菜单1子菜单2");
		childMenu2.setParentMenu(menu1);
		
		session.save(menu);
		session.save(menu1);
		session.save(childMenu1);
		session.save(childMenu2);
	}
	
	
}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值