一、模型设计
1、实体类
package com.**.hibernate.pojo.tree;
public class Category {
private Integer id;
private String name;
//父类别
private Category parentCategory;
//当前类型在树中的级别
private Integer level;
//父类和子类的一对多关系
private Set<Category> categories = new HashSet<Category>();
}
2、xml
<hibernate-mapping package="com.**.hibernate.pojo.tree">
<class name="Category" table="t_category">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="name" column="name"></property>
<property name="level" column="level"></property>
<!--父记录-->
<many-to-one name="parentCategory" class="Category" column="parent_id" />
<!-- 子己录 -->
<set name="categories" inverse="true" order-by="id" cascade="all">
<key column="parent_id"></key>
<one-to-many class="Category"/>
</set>
</class>
</hibernate-mapping>
在Config配置中注入映射文件
<mapping resource="com/**/hibernate/pojo/tree/Category.hbm.xml" />
二、测试
1、save
package com.**.hibernate;
public class TreeTest {
@Test
public void testSave() {
//一级分类
Category category1 = new Category();
category1.setName("家用电器");
category1.setLevel(1);
Category category2 = new Category();
category2.setName("运动户外");
category2.setLevel(1);
//二级分类
Category category11 = new Category();
category11.setName("生活家电");
category11.setLevel(2);
Category category12 = new Category();
category12.setName("大家电");
category12.setLevel(2);
//为家用电器添加二级分类
//级联
category1.getCategories().add(category11);
category1.getCategories().add(category12);
//关系
category11.setParentCategory(category1);
category12.setParentCategory(category1);
Session session = HibernateUtil.openSession();
Transaction tx = session.beginTransaction();
session.save(category1);
session.save(category2);
tx.commit();
session.close();
}
}
2、search
@Test
public void testSearch() {
Session session = HibernateUtil.openSession();
Category category = session.get(Category.class, 1);
System.out.println(category);
session.close();
}
数据库中的结构:
具体应用可以参考某东或者某宝的菜单