• hibernate它5.many2one单向


    关系数据库表之间的关系:

    1 正确 1 

    1 正确 许多

    许多 正确 许多

    表间关系设计

    基于主键关联

    基于外键关联

    基于中间表

    1 对 1关系实现:

    基于主键关联

    基于外键关联

    基于中间表

     

    1 对 多关系实现:

    基于外键关联

    基于中间表

    多 对 多关系实现:

    基于中间表


    面向对象实体关系

    1 对 1 

    1 对 多

    多 对 多


    方向 :

    单向、双向



    CRUD:

    many2one配置:

    <?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="com.demo.model">
    
        <class name="Certificate" table="t_certificate">
            <id name="certificateId" column="certificate_id">
                <generator class="sequence"><param name="sequence">SEQ_T_CERTIFICATE</param></generator>
            </id>
            <property name="certificateName" column="certificate_name"/>
            <property name="certificateNo" column="certificate_no"/>
            <many-to-one name="student" column="student_id"></many-to-one>
        </class>
    </hibernate-mapping>

    <many-to-one name="student" column="student_id"></many-to-one>


    增、删、改

    @Test
    	public void addTest() {
    		Student student = new Student();
    		student.setStudentName("王五");
    		student.setAge(35);
    
    		Certificate certificate1 = new Certificate();
    		certificate1.setCertificateName("aa");
    		certificate1.setCertificateNo("3a10001");
    		certificate1.setStudent(student);
    		Certificate certificate2 = new Certificate();
    		certificate2.setCertificateName("bb");
    		certificate2.setCertificateNo("3a10002");
    		certificate2.setStudent(student);
    
    		Session session = null;
    
    		try {
    			session = HibernateUtil.openSession();
    			session.beginTransaction();
    			// 先保存one,再保存many
    			session.save(student);
    			session.save(certificate1);
    			session.save(certificate2);
    			session.getTransaction().commit();
    		} catch (Exception e) {
    			session.getTransaction().rollback();
    			e.printStackTrace();
    		} finally {
    			HibernateUtil.closeSession(session);
    		}
    
    	}
    
    	@Test
    	public void deleteTest() {
    		Student student = new Student();
    		student.setStudentId(1);
    		Certificate certificate1 = new Certificate();
    		certificate1.setCertificateId(1);
    		Certificate certificate2 = new Certificate();
    		certificate2.setCertificateId(2);
    		Session session = null;
    
    		try {
    			session = HibernateUtil.openSession();
    			session.beginTransaction();
    			session.delete(certificate1);
    			session.delete(certificate2);
    			session.delete(student);
    			session.getTransaction().commit();
    		} catch (Exception e) {
    			session.getTransaction().rollback();
    			e.printStackTrace();
    		} finally {
    			HibernateUtil.closeSession(session);
    		}
    	}
    
    	@Test
    	public void updateTest() {
    		Student student = new Student();
    		student.setStudentId(2);
    		student.setStudentName("赵四");
    		Certificate certificate1 = new Certificate();
    		certificate1.setCertificateId(3);
    		certificate1.setCertificateName("cc");
    		certificate1.setCertificateNo("s0001");
    		certificate1.setStudent(student);
    		Certificate certificate2 = new Certificate();
    		certificate2.setCertificateId(4);
    		certificate2.setCertificateName("dd");
    		certificate2.setCertificateNo("s0002");
    		certificate2.setStudent(student);
    		Session session = null;
    
    		try {
    			session = HibernateUtil.openSession();
    			session.beginTransaction();
    			session.update(certificate1);
    			session.update(certificate2);
    			session.update(student);
    			session.getTransaction().commit();
    		} catch (Exception e) {
    			session.getTransaction().rollback();
    			e.printStackTrace();
    		} finally {
    			HibernateUtil.closeSession(session);
    		}
    	}

    getTest:

    @Test
    	public void updateTest() {
    		Student student = new Student();
    		student.setStudentId(2);
    		student.setStudentName("赵四");
    		Certificate certificate1 = new Certificate();
    		certificate1.setCertificateId(3);
    		certificate1.setCertificateName("cc");
    		certificate1.setCertificateNo("s0001");
    		certificate1.setStudent(student);
    		Certificate certificate2 = new Certificate();
    		certificate2.setCertificateId(4);
    		certificate2.setCertificateName("dd");
    		certificate2.setCertificateNo("s0002");
    		certificate2.setStudent(student);
    		Session session = null;
    
    		try {
    			session = HibernateUtil.openSession();
    			session.beginTransaction();
    			session.update(certificate1);
    			session.update(certificate2);
    			session.update(student);
    			session.getTransaction().commit();
    		} catch (Exception e) {
    			session.getTransaction().rollback();
    			e.printStackTrace();
    		} finally {
    			HibernateUtil.closeSession(session);
    		}
    	}

    结果:

    Hibernate: select certificat0_.certificate_id as certific1_1_0_, certificat0_.certificate_name as certific2_1_0_, certificat0_.certificate_no as certific3_1_0_, certificat0_.student_id as student4_1_0_ from t_certificate certificat0_ where certificat0_.certificate_id=?
    3
    证书名称:cc
    Hibernate: select student0_.student_id as student1_0_0_, student0_.student_name as student2_0_0_, student0_.age as age0_0_ from t_student student0_ where student0_.student_id=?

    学员名称:赵四


    Student(one)对象被延迟载入了,many2one中,get支持延迟载入


    loadTest:

    @Test
    	public void loadTest() {
    		Session session = null;
    		try {
    			session = HibernateUtil.openSession();
    			session.beginTransaction();
    			Certificate certificate = (Certificate) session.load(
    					Certificate.class, 3);
    			System.out.println(certificate.getCertificateId());
    			System.out.println("证书名称:"+certificate.getCertificateName());
    			System.out.println("学员名称:"+certificate.getStudent().getStudentName());
    			session.getTransaction().commit();
    		} catch (Exception e) {
    			session.getTransaction().rollback();
    			e.printStackTrace();
    		} finally {
    			HibernateUtil.closeSession(session);
    		}
    	}

    结果:

    3
    Hibernate: select certificat0_.certificate_id as certific1_1_0_, certificat0_.certificate_name as certific2_1_0_, certificat0_.certificate_no as certific3_1_0_, certificat0_.student_id as student4_1_0_ from t_certificate certificat0_ where certificat0_.certificate_id=?
    证书名称:cc
    Hibernate: select student0_.student_id as student1_0_0_, student0_.student_name as student2_0_0_, student0_.age as age0_0_ from t_student student0_ where student0_.student_id=?
    学员名称:赵四

    many与one都被延迟载入

    补充表结构及实体类源代码:


    t_student




    t_certificate:



    Student:

    package com.demo.model;
    
    import java.io.UnsupportedEncodingException;
    
    /**学生信息双向
     * @author wobendiankun
     *2014-10-19 下午08:54:29
     */
    public class Student {
    	private int studentId ;
    	private String studentName ;
    	private int age;
    	public int getStudentId() {
    		return studentId;
    	}
    	public void setStudentId(int studentId) {
    		this.studentId = studentId;
    	}
    	public String getStudentName() {
    		return studentName;
    	}
    	public void setStudentName(String studentName) {
    		this.studentName = studentName;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	@Override
    	public String toString() {
    		String str="";
    		if(studentName!=null){
    			try {
    				str=new String(studentName.getBytes("UTF-8"));
    			} catch (UnsupportedEncodingException e) {
    				e.printStackTrace();
    			}
    		}
    		return "Student [studentId=" + studentId + ", studentName="
    				+ str + ", age=" + age + "]";
    	}
    	
    }
    

    Certificate

    package com.demo.model;
    
    /**从业资格证书
     * @author wobendiankun
     *2014-10-25 上午11:43:21
     */
    public class Certificate {
    	/**
    	 * 证书id
    	 */
    	private int certificateId ;
    	/**
    	 * 证书名称
    	 */
    	private String certificateName;
    	/**
    	 *证书编号
    	 */
    	private String certificateNo ;
    	
    	private Student student ;
    	public int getCertificateId() {
    		return certificateId;
    	}
    	public void setCertificateId(int certificateId) {
    		this.certificateId = certificateId;
    	}
    	public String getCertificateName() {
    		return certificateName;
    	}
    	public void setCertificateName(String certificateName) {
    		this.certificateName = certificateName;
    	}
    	public String getCertificateNo() {
    		return certificateNo;
    	}
    	public void setCertificateNo(String certificateNo) {
    		this.certificateNo = certificateNo;
    	}
    	public Student getStudent() {
    		return student;
    	}
    	public void setStudent(Student student) {
    		this.student = student;
    	}
    	
    }
    


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    Homestead 安装其它的PHP版本
    Angular调用父Scope的函数
    检测到在集成的托管管道模式下不适用的ASP.NET设置
    IE8不能保存cookie,造成response.redirect死循环的原因
    IE浏览器“自定义安全级别”不能设置的原因
    测试sql server服务是否配置正确
    Sql Server Express 2005提示"failed to generate a user instance of sql server "
    cordova使用Gradle构建下载maven太慢,使用阿里云镜像
    使用Cordova编译Android平台程序提示:Could not reserve enough space for 2097152KB object heap
    Angular动态编译Html
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4652480.html
Copyright © 2020-2023  润新知