zoukankan      html  css  js  c++  java
  • Hibernate映射 --- 自身跟自身的一对多关联

     

    自身跟自身的一对多关联

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

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

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

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

      

     

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

    我们创建一个分类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();
     }
     
    }
     
    查看数据添加结果
     
     
  • 相关阅读:
    day_01 python基础 基本数据类型 if条件
    计算多边形周长和面积
    我研究出来的属性查询,贴自己的代码,请大家指教
    配置sde
    如何编辑SDE数据库(转载)
    ArcSED连接方式
    不同窗体传递数据
    sde stuff
    ArcSED
    不显示查询问题的解决(太完美了,新建一个图层,表示查询结果)
  • 原文地址:https://www.cnblogs.com/mannixiang/p/6665213.html
Copyright © 2011-2022 走看看