一对多自身关联双向映射
一个一对多双向自身关联映射案例
<?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);
	   }
   }
}
  
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号