自身跟自身的一对多关联 什么时候会出现自身一对多关系呢?下面举个例子. 淘宝店里商品分类,一级分类:家用电器,个人化妆,运动户外等 家用电器下面二级分类:大家电,生活电器,厨房电器等 二级分类大家电下的三级分类:平板电视,空调,冰箱,洗衣机等. ![]() 像这样的关系如何在数据库表中体现呢? 我们创建一个分类category表,专门用来存储类别.并定义一个parent_id字段和level等级字段.用来记录分类级别的信息,其中parent_id是外键,其主键就是自身的id ![]() ![]() 数据库表创建好了,下面通过Hibernate逆向工程,生成映射文件和持久化类. category父类和子类的关联关系是一对多的关联关系.因此在持久化类中添加set<Category>用来保存多的一方 ![]() ![]() 第三步:编写测试类 package com.entity;
/** * 自身一对多关系案例 */ import org.hibernate.Session;
import com.util.HibernateSessionFactory;
public class HibernateTest {
/**
* @param args */ public static void main(String[] args) { HibernateTest hibernateTest = new HibernateTest(); hibernateTest.addThirdLevel(); } /**
* 添加一级分类 */ public void addFirstLevel(){ Session session = HibernateSessionFactory.getSessionFactory().getCurrentSession(); session.beginTransaction(); //添加一级分类 Category c1 = new Category(); c1.setName("个人化妆"); c1.setDescription("个人化妆"); c1.setLevel(1); Category c2 = new Category(); c2.setName("运动户外"); c2.setDescription("运动户外"); c2.setLevel(1); session.save(c1); session.save(c2); session.beginTransaction().commit(); } /**
* 添加二级分类 */ public void addSecondLevel(){ Session session = HibernateSessionFactory.getSessionFactory().getCurrentSession(); session.beginTransaction(); //为家用电器添加二级分类 Category c1 = new Category(); c1.setName("大家电"); c1.setDescription("大家电"); c1.setLevel(2); Category c2 = new Category(); c2.setName("生活家电"); c2.setDescription("生活家电"); c2.setLevel(2); //父类 Category parent = (Category) session.get(Category.class, 1); c1.setParentCategory(parent); c2.setParentCategory(parent); session.save(c1); session.save(c2); session.beginTransaction().commit(); } /** * 添加三级分类 */ public void addThirdLevel(){ Session session = HibernateSessionFactory.getSessionFactory().getCurrentSession(); session.beginTransaction(); //为大家电添加三级分类 Category c1 = new Category(); c1.setName("平板电视"); c1.setDescription("平板电视"); c1.setLevel(2); Category c2 = new Category(); c2.setName("空调"); c2.setDescription("空调"); c2.setLevel(2); //父类 Category parent = (Category) session.get(Category.class, 4); c1.setParentCategory(parent); c2.setParentCategory(parent); session.save(c1); session.save(c2); session.beginTransaction().commit(); } } 查看数据添加结果
![]() |
相关文章
- Hibernate学习4—关联关系一对多映射2
- hibernate的映射关系之一对多
- Hibernate(六):映射一对多关联关系、双向一对多映射
- Hibernate框架关系映射一对多双向关联
- Java_SSH之Hibernate_002_06:一对多实体类和映射文件、一对多数据保存讲解、inverse的作用、用映射文件描述两个类之间的关系
- Hibernate中表与表之间的关联一对多,级联保存和级联删除
- hibernate多表操作之一对多的双向关联
- Hibernate逍遥游记-第13章 映射实体关联关系-006双向多对多(分解为一对多)
- 15.Hibernate一对多双向关联映射+分页
- 【Hibernate框架】关联映射(一对多,多对一)