一对多自身关联双向映射
2013-06-17 16:08
316 查看
一个一对多双向自身关联映射案例
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.bjpowernode.hibernate.Category" table="t_category"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <many-to-one name="parentCategory" column="category_id" cascade="save-update"/> <set name="childCategory" cascade="save-update"> <key column="category_id"/> <one-to-many class="com.bjpowernode.hibernate.Category"/> </set> </class> </hibernate-mapping>
package com.bjpowernode.hibernate; import java.io.Serializable; import java.util.HashSet; import java.util.Set; public class Category implements Serializable{ private Integer id; private String name; private Category parentCategory; private Set childCategory = new HashSet(); public Integer getId() { return id; } private void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Category getParentCategory() { return parentCategory; } public void setParentCategory(Category parentCategory) { this.parentCategory = parentCategory; } public Set getChildCategory() { return childCategory; } public void setChildCategory(Set childCategory) { this.childCategory = childCategory; } }
工具类
package com.bjpowernode.hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtils { private static SessionFactory factory; static { try { //读取hibernate.cfg.xml文件 Configuration cfg = new Configuration().configure(); //建立SessionFactory factory = cfg.buildSessionFactory(); }catch(Exception e) { e.printStackTrace(); } } public static Session getSession() { return factory.openSession(); } public static void closeSession(Session session) { if (session != null) { if (session.isOpen()) { session.close(); } } } public static SessionFactory getSessionFactory() { return factory; } }
测试类:
package com.bjpowernode.hibernate; import java.util.HashSet; import org.hibernate.Session; import junit.framework.TestCase; public class Test extends TestCase { public void addCategory(){ //创建session Session session = null; try{ session = HibernateUtils.getSession(); session.beginTransaction(); Category food = new Category(); food.setName("food"); Category vegetable = new Category(); vegetable.setName("vegetable"); Category fruit = new Category(); fruit.setName("fruit"); Category tomato = new Category(); tomato.setName("tomato"); Category apple = new Category(); apple.setName("apple"); Category orange = new Category(); orange.setName("orange"); food.getChildCategory().add(vegetable); vegetable.setParentCategory(food); food.getChildCategory().add(fruit); fruit.setParentCategory(food); fruit.getChildCategory().add(apple); apple.setParentCategory(fruit); fruit.getChildCategory().add(orange); orange.setParentCategory(fruit); fruit.getChildCategory().add(tomato); tomato.setParentCategory(fruit); session.save(food); session.beginTransaction().commit(); } catch(Exception e){ session.beginTransaction().rollback(); e.printStackTrace(); } finally{ HibernateUtils.closeSession(session); } } public void modifyCategory(){ //创建session Session session = null; try{ session = HibernateUtils.getSession(); session.beginTransaction(); Category tomato = (Category)session.get(Category.class, 5); Category vegetable = (Category)session.get(Category.class, 6); Category fruit = (Category)session.get(Category.class, 2); fruit.getChildCategory().remove(tomato); vegetable.getChildCategory().add(tomato); tomato.setParentCategory(vegetable); session.beginTransaction().commit(); } catch(Exception e){ session.beginTransaction().rollback(); e.printStackTrace(); } finally{ HibernateUtils.closeSession(session); } } }
相关文章推荐
- hibernate映射一对多,双向关系[关联自身],初学例子四
- 【一对多自身关联双向映射】
- hibernate双向多对一(一对多)及自身一对多关联
- Hibernate关联映射(单项多对一和一对多、双向一对多)
- hibernate映射多对多,一对一,一对多,自身关联综合应用
- Hibernate关联映射 --- 一对多实例分析(双向关联)
- Hibernate 双向的自身关联映射
- hibernate映射关系 一对多、多对一单向关联 一对多双向关联
- 初次邂逅Hibernate之关联映射(一对多,多对一,双向)
- Hibernate关系映射级别注解(一对多单向外键关联、一对多(多对一)双向外键关联)
- Hibernate在关于一对多,多对一双向关联映射
- Java的Hibernate框架中一对多的单向和双向关联映射
- Hibernate关系映射(五)一对多、多对一双向关联@OneToMany @OneToMany Annotation方式
- 一对多自身关联双向映射
- hibernate 关联映射 双向多对一(一对多)
- Hibernate4自学入门(五)——双向一对多、inverse属性、级联删除、一对多双向自身映射
- hibernate 关联映射:多对一(一对多)双向关联关系
- 【Hibernate步步为营】--(一对多映射)之双向关联
- Hibernate一对一主键关联映射(双向)
- 关联映射之⑦:双向1---1关联