自身跟自身的一对多关联

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

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

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

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

 

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

我们创建一个分类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();
 }
 
}
 
查看数据添加结果
 
 

最新文章

  1. 判断IP地址是否合法类
  2. Bootstrap库之Modals
  3. MyBatis 3源码分析
  4. hdu 1166:敌兵布阵(树状数组 / 线段树,入门练习题)
  5. ☀【CSS3】box-sizing
  6. 使用wireshark抓本机之间的包(转)
  7. 一张图看懂片式多层陶瓷电容器(MLCC)
  8. JDK中的Timer和TimerTask详解
  9. 基于Python的数据分析:数据库索引效率探究
  10. Odoo开源智造IT经理人创业圆梦计划正式启动
  11. Delphi 获取DataSet传入参数后的SQL命令
  12. angular学习笔记(三)
  13. 2017-2018-2 20165325 实验二《Java面向对象程序设计》实验报告
  14. Visual Studio 2015编译Lua 5.3.4遇到的坑
  15. windows下python操作mysql模块安装
  16. visual studio 2017 installer 安装包制作过程出现的问题---此安装程序需要.NET Framework 版本 3.5,请安装该版本,然后重新运行此安装程序,可以从Web获得.NET Framework 。要立即做此事吗?
  17. 经典 mysql 28道题
  18. QT中QToolTip样式设置的两种方式
  19. cocos代码研究(25)Widget子类PageView学习笔记
  20. 63.UniquePaths II---dp

热门文章

  1. WPF MeasureOverride和 ArrangeOverride做个 页面导航
  2. VS2015+MySql+EF6采坑经验总结
  3. AJPFX讲解外汇保证金交易的货币符号和外汇的报价方式
  4. SVM的代码实现-python
  5. MySQL 5.6不删空用户的影响
  6. [0day]微软VS全版本DLL却持漏洞(VS2015 VS2013 VS2012 VS2010 VS2008)
  7. 利用VS2017跨平台远程调试aspnetcore应用
  8. C# 多线程学习系列二
  9. CentOS7系统下YUM安装安装Mongodb 3.4
  10. 全网最详细的hive-site.xml配置文件里添加&lt;name&gt;hive.cli.print.header&lt;/name&gt;和&lt;name&gt;hive.cli.print.current.db&lt;/name&gt;前后的变化(图文详解)