zoukankan      html  css  js  c++  java
  • 多对多组件映射介绍

    不使用多对多关联映射的原因是为了提高数据库的运行性能,所以采用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());
    		}	
    	}		
    }


     

  • 相关阅读:
    创建类以及引用一个类
    修改hosts文件
    微信第三方登录接口开发
    Android定位
    Leetcode 102. Binary Tree Level Order Traversal
    Leetcode 725. Split Linked List in Parts
    Leetcode 445. Add Two Numbers II
    Leetcode 328. Odd Even Linked List
    Leetcode 237. Delete Node in a Linked List
    Leetcode 234. Palindrome Linked List
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3141057.html
Copyright © 2011-2022 走看看