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
- Hibernate_ManyToMany_Demo
- 蛇形布线&0Ω电阻
- VMware虚拟机如何使用
- SDUT 3344 数据结构实验之二叉树五:层序遍历
- 【贪心+优先队列】1428 活动安排问题【51nod】【难度:2级算法题】
- hdoj2029
- Hibernate_ManyToMany_Demo
- 编译模块时遇到Invalid module format
- 动态规划-3003-序列的最大上升子序列
- SourceInsight代码工程
- 统计学 入门基础概念篇 - Descriptive Statistics: Quantitative Measures(个人笔记)
- 环境变量的访问及设置
- SM2第二十一篇:OpenSSL中关于RSA_new和RSA_free的内存泄漏(CRYPTO_cleanup_all_ex_data)
- echo命令的-n、-e两个参数
- 【java并发】传统线程技术中创建线程的两种方式