Hibernate_ManyToMany_Demo

来源:互联网 发布:淘宝网店实名认证照片 编辑:程序博客网 时间:2024/04/20 05:43
<?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 package="org.zttc.itat.model">    <class name="TeacherCourse" table="t_teacher_course">        <id name="id">          <generator class="native"/>        </id>        <property name="ach"/>        <many-to-one name="teacher" column="tid"/>        <many-to-one name="course" column="cid"/>    </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 package="org.zttc.itat.model">    <class name="Teacher" table="t_teacher">        <id name="id">          <generator class="native"/>        </id>        <property name="name"/>        <set name="tcs" lazy="extra" inverse="true">        <key column="tid"/>        <one-to-many class="TeacherCourse"/>        </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 package="org.zttc.itat.model">    <class name="Course" table="t_course">        <id name="id">          <generator class="native"/>        </id>        <property name="name"/>        <set name="tcs" lazy="extra" inverse="true">        <key column="cid"/>        <one-to-many class="TeacherCourse"/>        </set>    </class></hibernate-mapping>

package org.zttc.itat.test;import org.hibernate.Session;import org.junit.Test;import org.zttc.itat.model.Admin;import org.zttc.itat.model.Classroom;import org.zttc.itat.model.Course;import org.zttc.itat.model.Role;import org.zttc.itat.model.Student;import org.zttc.itat.model.Teacher;import org.zttc.itat.model.TeacherCourse;import org.zttc.itat.util.HibernateUtil;public class TestManyToMany2 {@Testpublic void testAdd01() {Session session = null;try {session = HibernateUtil.openSession();session.beginTransaction();Teacher t1 = new Teacher();t1.setName("老张");session.save(t1);Teacher t2 = new Teacher();t2.setName("老刘");session.save(t2);Course c1 = new Course();c1.setName("数据结构");session.save(c1);Course c2 = new Course();c2.setName("计算机组成原理");session.save(c2);TeacherCourse tc1 = new TeacherCourse();tc1.setAch(87);tc1.setTeacher(t1);tc1.setCourse(c1);session.save(tc1);tc1 = new TeacherCourse();tc1.setAch(66);tc1.setTeacher(t1);tc1.setCourse(c2);session.save(tc1);tc1 = new TeacherCourse();tc1.setAch(190);tc1.setTeacher(t2);tc1.setCourse(c1);session.save(tc1);tc1 = new TeacherCourse();tc1.setAch(20);tc1.setTeacher(t2);tc1.setCourse(c2);session.save(tc1);session.getTransaction().commit();} catch (Exception e) {e.printStackTrace();if(session!=null) session.getTransaction().rollback();} finally {HibernateUtil.close(session);}}@Testpublic void testLoad01() {Session session = null;try {session = HibernateUtil.openSession();session.beginTransaction();Teacher t = (Teacher)session.load(Teacher.class, 1);//load的时候由于延迟加载,会根据不同的情况取相应的关联对象,所以会发出大量的sql/** * 总体来说:最佳实践就是,一般不使用双向关联,特别不建议使用一的这一方的关联 * 因为从一的这一端取关联对象很有可能会涉及到分页操作,所以基本不会使用 * 在设计的时候不是特殊情况不要使用双向关联。 */System.out.println(t.getName());for(TeacherCourse tc:t.getTcs()) {System.out.println(tc.getCourse().getName()+":"+tc.getAch());}session.getTransaction().commit();} catch (Exception e) {e.printStackTrace();if(session!=null) session.getTransaction().rollback();} finally {HibernateUtil.close(session);}}}

************************************************************************************************************************************************************************************************

<?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 package="org.zttc.itat.model">    <class name="Admin" table="t_admin">        <id name="id">          <generator class="native"/>        </id>        <property name="name"/>        <set name="roles" table="t_admin_role" lazy="extra">        <key column="aid"/>        <many-to-many class="Role" column="rid"/>        </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 package="org.zttc.itat.model">    <class name="Person" table="t_person">        <id name="id">        <!-- 表示不会自动生成,而是需要由用户来指定 -->          <!--   <generator class="assigned"/> -->        <!-- 会自动生成一个字符串,此时组件必须为String类型 -->          <generator class="native"/>        </id>        <property name="name"/>        <!-- name表示属性的名称,property-ref表示由对端来维护关系-->        <one-to-one name="idCard" property-ref="person"/>    </class></hibernate-mapping>

package org.zttc.itat.test;import org.hibernate.Session;import org.junit.Test;import org.zttc.itat.model.Admin;import org.zttc.itat.model.Classroom;import org.zttc.itat.model.Role;import org.zttc.itat.model.Student;import org.zttc.itat.util.HibernateUtil;public class TestManyToMany {/* * 使用Many2Many不论在哪一方来维护关系都比较的麻烦,而且很多时候关联表中需要加入其他的属性 * 所以在开发中,经常使用两个一对多来替代多对多 */@Testpublic void testAdd01() {Session session = null;try {session = HibernateUtil.openSession();session.beginTransaction();Admin a1 = new Admin();a1.setName("张三");session.save(a1);Admin a2 = new Admin();a2.setName("李四");session.save(a2);Role r1= new Role();r1.setName("超级管理员");r1.add(a1);session.save(r1);Role r2 = new Role();r2.setName("财务管理人员");r2.add(a1);r2.add(a2);session.save(r2);session.getTransaction().commit();} catch (Exception e) {e.printStackTrace();if(session!=null) session.getTransaction().rollback();} finally {HibernateUtil.close(session);}}@Testpublic void testLoad01() {Session session = null;try {session = HibernateUtil.openSession();session.beginTransaction();Admin a = (Admin)session.load(Admin.class, 1);System.out.println(a.getName());for(Role r:a.getRoles()) {System.out.println(r.getName());}session.getTransaction().commit();} catch (Exception e) {e.printStackTrace();if(session!=null) session.getTransaction().rollback();} finally {HibernateUtil.close(session);}}}


0 0
原创粉丝点击