自身跟自身的一对多关联

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

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

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

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

 

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

我们创建一个分类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. neo4j图数据库安装以及基本操作命令

    neo4j图数据安装以及基本操作命令 neo4j安装配置使用, 安装环境:Ubuntu系统 jdk1.8 (neo4j 只支持jdk1.8以上版本) 下载 neo4j neo4j的下载window可以 ...

  2. 介绍 Scratch 3.0:扩展编码创造力

    在过去十年中,全世界数百万儿童使用Scratch编写自己的互动游戏,故事,动画等. 这种磅礴的创造力激励我们继续扩展和改进Scratch,让世界各地的孩子都有新的机会用新技术创造性地表达自己. 今天, ...

  3. cisco 的ACL

    搞网络好几年了,怎么说呢,水平一直停留在NA-NP之间,系统的学完NA后,做了不少实验,后来也维护了企业的网络,各种网络设备都玩过(在商汤用的Juniper srx 550 我认为在企业环境,非IDC ...

  4. CSS3标签显示模式

    HTML标签一般分为块标签和行内标签两种类型,它们也称块元素和行内元素.具体如下: 块级元素(block-level) 每个块元素通常都会独自占据一整行或多整行,可以对其设置宽度.高度.对齐等属性,常 ...

  5. 设计模式《JAVA与模式》之迭代子模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述迭代子(Iterator)模式的: 迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不 ...

  6. iOS-贝塞尔连续曲线

    一个曲线 UIColor *color = [UIColor redColor]; [color set]; UIBezierPath *path = [UIBezierPath bezierPath ...

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

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

  8. html头部标签大全

    http://www.css88.com/archives/8052#table-index

  9. POJ 2551

    #include<iostream> #include<stdio.h> #include<string> using namespace std; //int m ...

  10. winform计算文本的所占的像素长度

    /// <summary> /// 计算文本的宽度 /// </summary> /// <param name="str"></para ...