自身跟自身的一对多关联

什么时候会出现自身一对多关系呢?下面举个例子.

淘宝店里商品分类,一级分类:家用电器,个人化妆,运动户外等

家用电器下面二级分类:大家电,生活电器,厨房电器等

二级分类大家电下的三级分类:平板电视,空调,冰箱,洗衣机等.

 

像这样的关系如何在数据库表中体现呢?

我们创建一个分类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映射 --- 自身跟自身的一对多关联的更多相关文章

  1. hibernate映射的 关联关系:有 一对多关联关系,一对一关联关系,多对多关联关系,继承关系

    hibernate环境配置:导包.... 单向n-1:单向 n-1 关联只需从 n 的一端可以访问 1 的一端 <many-to-one> 元素来映射组成关系: name: 设定待映射的持 ...

  2. hibernate映射xml文件配置之一对多,多对多

    一对多配置 [1]班级和学生模型 --->班级可容纳多个学生 --->学生只能属于一个班级 [2]一对多配置中的关系维护(inverse) --->一端放弃关系的维护 ---> ...

  3. Hibernate映射解析——七种映射关系

    首先我们了解一个名词ORM,全称是(Object Relational Mapping),即对象关系映射.ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现,这样开发人员就可以把对 ...

  4. Hibernate映射--基本类映射和对象关系映射(转)

    原文地址:http://blog.csdn.net/lovesummerforever/article/details/20901011   尊重原创,请访问原网址 回想一些我们在没有学习ssh的时候 ...

  5. MyBatis多对一,一对多,多对多,一对多关联查询

    一.Person实体类 1 public class Person { 2 private Integer personId; 3 private String name; 4 private Int ...

  6. (Hibernate进阶)Hibernate映射——一对多关联映射(七)

    一对多关联映射 映射原理 一对多关联映射和多对一关联映射的映射原理是一致的,都是在多的一端加入一个外键,指向一的一端.关联关系都是由多端维护,只是在写映射时发生了变化. 多对一和一对多的区别 多对一和 ...

  7. 【SSH系列】Hibernate映射 -- 一对多关联映射

        映射原理       一对多关联映射和多对一关联映射的映射原理是一样一样的,所以说嘛,知识都是相通的,一通百通,为什么说一对多关联映射和多对一关联映射是一样的呢?因为她们都是在多的一端加入一个 ...

  8. 【SSH进阶之路】Hibernate映射——一对多关联映射(七)

    上上篇博文[SSH进阶之路]Hibernate映射——一对一单向关联映射(五),我们介绍了一对一的单向关联映射,单向是指只能从人(Person)这端加载身份证端(IdCard),但是反过来,不能从身份 ...

  9. hibernate一对多关联映射

    一对多关联映射 映射原理 一对多关联映射和多对一关联映射的映射原理是一致的,都是在多的一端加入一个外键,指向一的一端.关联关系都是由多端维护,只是在写映射时发生了变化. 多对一和一对多的区别 多对一和 ...

随机推荐

  1. Windows下Node.js的安装与配置

    一.下载和安装 1. 前往官网https://nodejs.org/或https://nodejs.org/en/download/下载最新推荐版的Node.js,本文使用10.13.0版本. 对于W ...

  2. WPF的xaml中特殊字符表示

    直接看表,描述很清晰 字符 转义字符 备注 & (ampersand) & 这个没什么特别的,几乎所有的地方都需要使用转义字符 > (greater-than character ...

  3. UWP FillRowViewPanel

    最近有童鞋有这种需求,说实话我不知道这个Panel怎么起名字. 效果连接https://tuchong.com/tags/风光/ 下面是我做成的效果,可以规定每个Row的Items个数 2个 3个 4 ...

  4. Mysql数据优化--DBA梳理珍藏篇

    1. 优化SQL 1)     通过show status了解各种sql的执行频率 show status like 'Com_%'        了解 Com_select,Com_insert 的 ...

  5. vue教程1-09 交互 vue实现百度下拉列表

    vue教程1-09 交互 vue实现百度下拉列表 <!DOCTYPE html> <html lang="en"> <head> <met ...

  6. [Umbraco] xslt语言介绍及与umbraco的关系

    XSLT是扩展样式表转换语言(Extensible Stylesheet Language Transformations)的简称,这是一种对XML文档进行转化的语言,XSLT中的T代表英语中的“转换 ...

  7. python面试(3)

    一.语言 推荐一本看过最好的python书籍? 拉开话题好扯淡 谈谈python的装饰器,迭代器,yield? 标准库线程安全的队列是哪一个?不安全的是哪一个?logging是线程安全的吗? pyth ...

  8. 深入浅出SQL Server中的死锁(实战篇)

    简介 死锁的本质是一种僵持状态,是多个主体对于资源的争用而导致的.理解死锁首先需要对死锁所涉及的相关观念有一个理解. 一些基础知识 要理解SQL Server中的死锁,更好的方式是通过类比从更大的面理 ...

  9. Linux下升级Python到3.5.2版本

    原文出处:https://www.cnblogs.com/tssc/p/7762998.html 本文主要介绍在Linux(CentOS)下将Python的版本升级为3.5.2的方法 众所周知,在20 ...

  10. vuejs之Vue Devtools

    Vue Devtools大法好 这是一篇小白friendly教程 Vue Devtools是一款谷歌浏览器插件,专门为调试vue而设计.假设你做了一个vue应用,当你在调试的过程中,打开的控制台是这样 ...