多对多组件映射介绍

不使用多对多关联映射的原因是为了提高数据库的运行性能,所以采用componenet映射,这个componenet类随着主类的消失而消失,不需要建立单独的映射文件。只能由主类看到componenet的信息。

 

component在表中没有对应的oid,

可以关联其它持久化类

component不能单独持久化(不能单独保存)

生命周期依赖于主类的生命周期

 

 

eg:

package com.bjpowernode.hibernate;



import java.util.HashSet;

import java.util.Set;



public class Monkey {

    private Integer id;

    private String name;

    //是它身体的一部分

    private Set monkeyAndTeacher = new HashSet();

	public Integer getId() {

		return id;

	}

	public void setId(Integer id) {

		this.id = id;

	}

	public String getName() {

		return name;

	}

	public void setName(String name) {

		this.name = name;

	}

	public Set getMonkeyAndTeacher() {

		return monkeyAndTeacher;

	}

	public void setMonkeyAndTeacher(Set monkeyAndTeacher) {

		this.monkeyAndTeacher = monkeyAndTeacher;

	}

}


 

package com.bjpowernode.hibernate;



public class MonkeyAndTeacher {

    private Monkey monkey;

    private Teacher teacher;

    private String gongfu ;

	public Monkey getMonkey() {

		return monkey;

	}

	public void setMonkey(Monkey monkey) {

		this.monkey = monkey;

	}

	public Teacher getTeacher() {

		return teacher;

	}

	public void setTeacher(Teacher teacher) {

		this.teacher = teacher;

	}

	public String getGongfu() {

		return gongfu;

	}

	public void setGongfu(String gongfu) {

		this.gongfu = gongfu;

	}

}


 

package com.bjpowernode.hibernate;



import java.util.HashSet;

import java.util.Set;



public class Teacher {

    private Integer id;

    private String name;

    private Set monkeyAndTeacher = new HashSet();

	public Integer getId() {

		return id;

	}

	public void setId(Integer id) {

		this.id = id;

	}

	public String getName() {

		return name;

	}

	public void setName(String name) {

		this.name = name;

	}

	public Set getMonkeyAndTeacher() {

		return monkeyAndTeacher;

	}

	public void setMonkeyAndTeacher(Set monkeyAndTeacher) {

		this.monkeyAndTeacher = monkeyAndTeacher;

	}

}


 

<?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.Monkey" table="t_monkey">

		<id name="id">

			<generator class="native"/>

		</id>

		<property name="name"/>

		<set name="monkeyAndTeacher" table="t_monkey_teacher" lazy="true">

		   <key column="monkey_id"/>

	       <composite-element class="com.bjpowernode.hibernate.MonkeyAndTeacher">

	            <parent name="monkey"/>

	            <many-to-one name="teacher" not-null="true" column="teacher_id" class="com.bjpowernode.hibernate.Teacher"/>

	            <property name="gongfu" type="string" not-null="true"/>

	       </composite-element>

	    </set>

	</class>

</hibernate-mapping>


 

<?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.Teacher" table="t_teacher">

		<id name="id">

			<generator class="native"/>

		</id>

		<property name="name"/>

		<set name="monkeyAndTeacher" table="t_monkey_teacher" lazy="true" inverse="true">

		   <key column="teacher_id"/>

	       <composite-element class="com.bjpowernode.hibernate.MonkeyAndTeacher">

	            <parent name="teacher"/>

	            <many-to-one name="monkey" not-null="true" column="monkey_id" class="com.bjpowernode.hibernate.Monkey"/>

	            <property name="gongfu" type="string" not-null="true"/>

	       </composite-element>

	    </set>

	</class>


 

package com.bjpowernode.hibernate;



import java.util.HashSet;

import java.util.Iterator;

import java.util.Set;

import org.hibernate.Hibernate;

import org.hibernate.Session;

import junit.framework.TestCase;

public class Many2ManyTest extends TestCase {

	public void testSave1() {

		Session session = null;

		try {

			session = HibernateUtils.getSession();

			session.beginTransaction();

		

			Teacher t1 = new Teacher();

			t1.setName("红孩儿");

			session.save(t1);

			

			Teacher t2 = new Teacher();

			t2.setName("二郎神");

			session.save(t2);

			

			Monkey m = new Monkey();

			m.setName("猴子一");

			session.save(m);

			

			

			MonkeyAndTeacher mt1=  new MonkeyAndTeacher();

			mt1.setTeacher(t1);

		    mt1.setGongfu("三位真火");

		    mt1.setMonkey(m);

		    

			

			MonkeyAndTeacher mt2=  new MonkeyAndTeacher();

			mt2.setTeacher(t2);

		    mt2.setGongfu("七十三变");

		    mt2.setMonkey(m);

		    

		    m.getMonkeyAndTeacher().add(mt1);

		    m.getMonkeyAndTeacher().add(mt2);

		    

		    session.save(m);

		

			session.getTransaction().commit();

		}catch(Exception e) {

			e.printStackTrace();

			session.getTransaction().rollback();

		}finally {

			HibernateUtils.closeSession(session);

		}

	}	

	

	public void testLoad1() {

		Session session = null;

		Monkey m = null;

		try {

			session = HibernateUtils.getSession();

			session.beginTransaction();

	        m = (Monkey)session.load(Monkey.class, 1);

			System.out.println(m.getName());

			for (Iterator iter=m.getMonkeyAndTeacher().iterator(); iter.hasNext();) {

				MonkeyAndTeacher role = (MonkeyAndTeacher)iter.next();

				Hibernate.initialize(role.getTeacher());

				//System.out.println(role.getName());

			}

			session.getTransaction().commit();

		}catch(Exception e) {

			e.printStackTrace();

			session.getTransaction().rollback();

		}finally {

			HibernateUtils.closeSession(session);

		}

		System.out.println(m.getName());

		for(Iterator i = m.getMonkeyAndTeacher().iterator();i.hasNext();){

			MonkeyAndTeacher mt = (MonkeyAndTeacher)i.next();

			System.out.println(mt.getTeacher().getName());

			System.out.println("我的功夫是:"+ mt.getGongfu());

		}	

	}		

}


 

 

你可能感兴趣的:(多对多)