自身跟自身的一对多关联
什么时候会出现自身一对多关系呢?下面举个例子.
淘宝店里商品分类,一级分类:家用电器,个人化妆,运动户外等
家用电器下面二级分类:大家电,生活电器,厨房电器等
二级分类大家电下的三级分类:平板电视,空调,冰箱,洗衣机等.
像这样的关系如何在数据库表中体现呢?
我们创建一个分类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();
}
* @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 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();
}
}
查看数据添加结果