一对多自身关联双向映射

来源:互联网 发布:数据库查询分析器 编辑:程序博客网 时间:2024/05/01 15:36
一个一对多双向自身关联映射案例
<?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();//建立SessionFactoryfactory = 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);   }   }}


 

原创粉丝点击