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;
	}

}

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

时间: 2024-08-10 21:30:37

hibernate它5.many2one单向的相关文章

hibernate之5.many2one单向

关系数据库表间关系: 1 对 1 1 对 多 多 对 多 表间关系设计 基于主键关联 基于外键关联 基于中间表 1 对 1关系实现: 基于主键关联 基于外键关联 基于中间表 1 对 多关系实现: 基于外键关联 基于中间表 多 对 多关系实现: 基于中间表 面向对象实体关系 1 对 1 1 对 多 多 对 多 方向 : 单向.双向 CRUD: many2one配置: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PU

hibernate之 10.many2many单向

在前文hibernate之5.many2one单向提到多对多关系,表结构设计是基于中间表来实现, 下面以用户与角色(多对多)为例,在Hibernate是如何操作的 表结构设计: 类图: CRUD; Student package com.demo.model; import java.io.UnsupportedEncodingException; import java.util.Set; /**学生信息 * @author wobendiankun *2014-10-19 下午08:54:2

hibernate之关于一对一单向,双向关联映射

[hibernate]之关于一对一单向,双向关联映射 首先我们来看,Hibernate官方对于一对一单向关联的解释: 基于外键关联的单向一对一关联和单向多对一关联几乎是一样的.唯一的不同就是单向一对一关 联中的外键字段具有唯一性约束. ok,那我们也可以这样理解,一对一其实就是多对一关联的特殊形式,我们知道Hibernate的配置方式有两种,分别是Annotations,XML两种配置方式! Annotations的一对一单向关联映射 人(User)和***号(Card) @Entity @Ta

hibernate之多对一单向关联

一个工作组(Group)里可以有多个用户(User),一个User只属于一个Group,这是典型的多对一的关系.在多对一的关系中正确的数据库设计是在多的这方(在这里是User这方)加一个Group的外键.如果数据库设计的与之相反就会产生冗余,请看下面这个例子: 友情提示:这是错误的设计方法: GroupId GroupName UserId 1 Group_1 1 1 Group_1 2 UserId UserName 1 moluo 2 xingzhe 这样在一的这方(也就是Group这方)设

Hibernate ORM框架——续第二章:Hibernate映射关系:单向关联

一:课堂笔记 **********单表映射*************** 1.只有一个实体类映射一个表 2.有一个实体类+ 一个或者多个值类型,合在一起 映射为一个表 **********多表映射*************** 定义:类有多个映射为多个表 **********数据库层面,如ORM无关************** 2个表之间要建立关系?该如何做?有多少种方法 假定有2个表,分别为A,B 3种关系 a)主键关联:A表的主键对应B表的主键,(一对一的关系) 在数据库种如何建立这种关系?

Hibernate三 关联关系之单向关联

一 分类Hibernate的关联关系可分为:单向关联和双向关联单向关联包括:1->1 1->N N->1 N->N 双向关联包括:1->1 1->N N->N二 单向N->1关联1.程序应该在N的一端的持久化类中增加一个属性,该属性引用1的一端的关联实体对于N->1关联,都需要在N的一端使用@ManyToOne修饰代表关联实体的属性,该注解可以指定以下属性:(1)cascade:指定Hibernate对关联实体采用怎样的级联策略,包括以下五种情况:Ca

hibernate之 8.one2one单向

表结构: 类图: CRUD: 配置: User.hbm.xml <?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-map

hibernate之6.one2many单向

表结构: 实体类图: CRUD: Student: package com.demo.model; import java.io.UnsupportedEncodingException; import java.util.Set; /**学生信息 * @author wobendiankun *2014-10-19 下午08:54:29 */ public class Student { private int studentId ; private String studentName ;

【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)

[SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,采用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例(二),小编搭建了基本Hibernate的开发环境,并做了一个简单实例,对它的基本原理有了一个理性的认识. [SSH进阶之路]Hibernate基本映射(三),我们介绍了Hibernate的基本映射(即对一个实体进行映射)的相关概念,并给大家实现相关实例,比较简单. 这篇博客,我们开始介绍基于基本映