• 多对多组件映射介绍


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


     

  • 相关阅读:
    Windows PE变形练手3-把通用模板机器码直接覆盖目标PE
    Windows PE变形练手2-开发一套自己的PE嵌入模板
    R3抹掉加载的DLL
    R3获取kernel32地址
    Windows PE变形练手1-用PE自己的机器码修改自己的逻辑
    Windows PE 第十三章 PE补丁技术
    Windows PE 第十二章 PE变形技术
    16.PHP_Ajax模拟服务器登录验证
    15.PHP_PHP与Ajax
    14.PHP_PHP与XML技术
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3141057.html
Copyright © 2020-2023  润新知