`
chaoyi
  • 浏览: 301915 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate 多对一关联关系的例子

 
阅读更多

图示:

 

 

创建 Teacher 实体类和它的映射文件Teacher.hbm.xml

package entity;

public class Teacher {
	private int id; // 编号
	private String name;// 姓名

	/*
	 * 构造方法
	 */
	public Teacher() {
	}

	public Teacher(String name) {
		this.name = name;
	}

	/*
	 * 封装方法
	 */
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="entity.Teacher" >
		<id name="id" type="java.lang.Integer">
			<generator class="sequence">
				<param name="sequence">seq_teacher</param>
			</generator>
		</id>
		<property name="name" type="java.lang.String">
			<column name="name"></column>
		</property>
	</class>
</hibernate-mapping>

 创建 Student 实体类和它的映射文件Student.hbm.xml

package entity;

public class Student {
	private int id; // 编号
	private String name;// 姓名
	private Teacher teacher;// 用来作约束的

	/*
	 * 构造方法
	 */
	public Student() {
	}

	public Student(String name) {
		this.name = name;
	}

	/*
	 * 封装方法
	 */
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Teacher getTeacher() {
		return teacher;
	}

	public void setTeacher(Teacher teacher) {
		this.teacher = teacher;
	}

}

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="entity.Student" >
		<id name="id" type="java.lang.Integer">
			<generator class="sequence">
				<param name="sequence">seq_student</param>
			</generator>
		</id>
		<property name="name" type="java.lang.String">
			<column name="name"></column>
		</property>
		<many-to-one name="teacher" column="tid" class="entity.Teacher"></many-to-one>
	</class>
</hibernate-mapping>

 

配置 hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
	<!-- 数据库URL -->
	<property name="connection.url">
		jdbc:oracle:thin:@localhost:1521:oracle11
	</property>
	<!-- 数据库用户 -->
	<property name="connection.username">A_hr</property>
	<!-- 数据库用户密码 -->
	<property name="connection.password">123456</property>
	<!-- 数据库 JDBC 驱动 -->
	<property name="connection.driver_class">
		oracle.jdbc.driver.OracleDriver
	</property>
	<!-- 是否将运行期生成的 SQL 输出到日志以供调试 -->
	<property name="show_sql">true</property>
	<!-- 每个数据库都有其对应的 Dialect 以匹配其平台特征 -->
	<property name="dialect">
		org.hibernate.dialect.Oracle10gDialect
	</property>
	<property name="hbm2ddl.auto">create</property>
	<mapping resource="entity/Student.hbm.xml" />
	<mapping resource="entity/Teacher.hbm.xml" />
</session-factory>
</hibernate-configuration>

 

package test;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import entity.Student;
import entity.Teacher;

public class MaryToOneTest {
	public static void main(String[] args) {
		maryToOne();
	}

	private static void maryToOne() {
		// 构造配置对象,并且读取配置
		Configuration cfg = new Configuration().configure();
		// SessionFactory = 管理连接工厂
		SessionFactory sf = cfg.buildSessionFactory();
		// Session连接
		Session session = sf.openSession();
		// 增删改用事务
		Transaction tx = null;
		
		Teacher teacher =new Teacher("李老师");
		Student student1 = new Student("A学生");
		Student student2 = new Student("B学生");
		student1.setTeacher(teacher);//对象模型,建立两个对象的关联
		student2.setTeacher(teacher);//对象模型,建立两个对象的关联
		
		try {
			tx=session.beginTransaction();
			session.save(teacher);
			session.save(student1);
			session.save(student2);
			tx.commit();
			System.out.println("保存成功!!!");
		} catch (HibernateException e) {
			e.printStackTrace();
			tx.rollback();
		}finally{
			session.close();
			sf.close();
		}
		
	}
}

 

控制台的效果图:

 

数据库里面的效果图:


 

 

  • 大小: 23.2 KB
  • 大小: 79.2 KB
  • 大小: 10.1 KB
  • 大小: 10.7 KB
分享到:
评论

相关推荐

    hibernate多对多关联映射

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系数据库模型映射方式,用于处理两个实体之间存在多个实例互相关联的情况。本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关...

    hibernate外键实现一对一单向关联关系源码

    在本主题中,我们将深入探讨如何利用Hibernate实现一对一(One-to-One)单向关联关系,并通过源码分析来理解其工作原理。 **一对一关联关系**在数据库设计中表示两个表之间存在唯一的对应关系,例如,一个人可能...

    hibernate多对多关联映射(单项关联)

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系模型,它用于处理两个实体类之间存在多个对应关系的情况。这篇博客"hibernate多对多关联映射(单项关联)"深入探讨了如何在Hibernate中实现这种映射...

    Hibernate ORM - 一对多双向关联关系

    标题“Hibernate ORM - 一对多双向关联关系”指的是在数据库建模中,Hibernate ORM(对象关系映射)框架如何处理一个实体类(如User)与多个实体类(如Article)之间的关系。在这种关系中,一个用户可以拥有多个文章...

    hibernate外键实现一对一双向关联关系源码

    在Hibernate中,通常使用`@OneToOne`注解来定义一对一关系,而双向关联则意味着两个实体类都将拥有指向对方的引用。 1. **实体类定义**: 在一对一双向关联中,我们会有两个实体类,例如`User`和`Profile`。`User`...

    Hibernate双向一对一关联映射(注解版)

    // 使用@OneToOne和@JoinColumn注解声明与Person的一对一关系,并定义外键列名 @OneToOne @JoinColumn(name = "person_id") // 这里的"person_id"应与数据库中实际的外键列名一致 private Person person; // ...

    hibernate关联映射详解

    包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。

    Hibernate 一对一,一对多,多对多例子

    “Hibernate 一对一,一对多,多对多例子” 指的是使用Hibernate框架实现数据库中不同关联关系的示例。Hibernate是一个Java持久化框架,它提供了对象关系映射(ORM)功能,使得开发人员可以方便地在Java对象和关系...

    Hibernate 一对一关联查询.docx

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联查询是一种常见的关系映射方式,用于表示两个实体之间一对一的依赖关系。这种关联通常在数据库中通过外键或者主键来实现。本文将深入探讨基于外键的一对一...

    Hibernate一对一主键关联映射(单向关联)

    这里,`@OneToOne`注解表明了与`Person`类的一对一关系,`mappedBy = "profile"`表示`Person`类中有一个属性`profile`引用了`Profile`对象。 接下来,在`Person`类中,我们不需要显式地定义对`Profile`的引用,因为...

    Hibernate多对多关联添加及查询示例

    多对多关联是数据库设计中的一种常见关系类型,指的是两个实体之间可以存在多个对应关系。例如,在学生与课程的关系中,一个学生可以选修多门课程,而一门课程也可以被多个学生选修。在Hibernate中,这种关系通过`@...

    Hibernate一对一主键关联映射(双向关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是一种常见的关系数据库模型映射方式。这种关联通常发生在两个实体之间,且每个实体都只有一个对应的实例。本篇文章将详细探讨双向一对一主键关联映射...

    hibernate基于主外键的一对多/多对一关联

    "hibernate基于主外键的一对多/多对一关联"是Hibernate中两个核心的概念,用于描述实体之间的关系。下面将详细阐述这两个关联类型及其实现方式。 一对多关联是指在数据库中,一个表的记录可以与另一个表中的多个...

    Hibernate一对一唯一外键关联映射(双向关联)

    在数据库设计中,这种关系通常通过主键和外键的方式实现,其中一方的主键作为另一方的外键,确保了两表间的一对一关系。 二、唯一外键关联映射 在Hibernate中,一对一关联可以通过配置XML映射文件或使用注解来实现...

    Hibernate ORM - 多对多双向连接表关联关系

    本文将深入探讨Hibernate ORM中的一个关键概念——多对多双向连接表关联关系。这种关联关系在实际业务场景中非常常见,比如用户与角色、课程与学生等例子,都需要用到多对多的关系来描述它们之间的复杂联系。 首先...

    Hibernate一对一关联映射(注解)

    一对一关系中,User有一个IdCard属性,而IdCard也有一个User属性。 ```java @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 一对一关联,IdCard...

    hibernate多对多映射的例子

    本例子主要关注的是Hibernate中的多对多映射,这是一个复杂但常见的关系类型,适用于表示两个实体之间没有主次之分的关系。 在数据库设计中,多对多关系意味着一个表的记录可以对应另一个表中的多个记录,反之亦然...

Global site tag (gtag.js) - Google Analytics