类图如下:
在关系模型中,同多对一一样,还是在Student表中有一个外键指向Class表。
在配置的时候需要注意了,Student配置文件不需要进行额外的配置了,需要进行额外配置的是MyClass的配置文件,需要通过set标签配置,这里set标签也是有两个作用的,一为数据库服务,第二位程序服务。
MyClass.java
package com.org.model; import java.util.HashSet; import java.util.Set; public class MyClass { private int id; private String name; private Set<Student> students = new HashSet<Student>(); public Set<Student> getStudents() { return students; } public void setStudents(Set<Student> students) { this.students = students; } 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; } }Student.java
package com.org.model; public class Student { private int id; private String name; 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; } }MyClass.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.org.model"> <class name="MyClass" table="class"> <id name="id"> <generator class="native"/> </id> <property name="name" not-null="true"/> <!-- set标签中的name为MyClass类中多方对应的属性名 key标签中的column为多方数据库表中的外键字段--> <set name="students" cascade="save-update"> <key column="class_id" not-null="true"></key> <one-to-many class="Student"/> <!-- class表明set中放的是什么类型的集合 --> </set> </class> </hibernate-mapping>Student.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.org.model"> <class name="Student" table="student"> <id name="id"> <generator class="native"/> </id> <property name="name" column="name" not-null="true"/> </class> </hibernate-mapping>测试类HibernateTest.java
package com.org.model.test; import java.util.HashSet; import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.Test; import com.org.model.MyClass; import com.org.model.Student; import com.org.util.HibernateUtil; public class HibernateTest { @Test public void testSave1() { Session session = null; Transaction tx = null; try { // 拿到session session = HibernateUtil.getSession(); System.out.println(session); // 开启事务 tx = session.beginTransaction(); // 给实体赋值 MyClass class1 = new MyClass(); class1.setName("09001"); Student st1 = new Student("aaa"); Student st2 = new Student("bbb"); Student st3 = new Student("ccc"); HashSet<Student> students = new HashSet<Student>(); students.add(st1); students.add(st2); students.add(st3); class1.setStudents(students); session.save(class1); // 提交事务 tx.commit(); } catch (Exception e) { // 打印堆栈信息 e.printStackTrace(); // 事务回滚 if (tx != null) { tx.rollback(); } } } }由于配置了级联关系,Hibernate在插入班级数据(一方)时,会把它所关联的学生数据(多方)也保存到数据库中。
缺点:对象之间的关联关系由一方来维护,在插入一方数据时会更新多方的与这个“一”的对象有关联的对象。导致频繁访问数据库。
测试时,控制台输出的sql语句:
Hibernate: insert into class (name) values (?) Hibernate: insert into student (name, class_id) values (?, ?) Hibernate: insert into student (name, class_id) values (?, ?) Hibernate: insert into student (name, class_id) values (?, ?) Hibernate: update student set class_id=? where id=? Hibernate: update student set class_id=? where id=? Hibernate: update student set class_id=? where id=?
相关推荐
在本主题"Hibernate单向一对多关联映射(XML版)"中,我们将深入探讨如何使用XML配置来实现数据库中一个实体类对应多个实体类的关联关系。 在Hibernate中,一对多关联是一种常见的关系映射类型,它反映了数据库中的...
在Java的持久化框架Hibernate中,单向一对多关联映射是常见的数据关系处理方式,尤其是在处理数据库中的实体类和表之间的关系时。本主题主要关注如何使用注解来实现这种映射。Hibernate通过注解使得对象关系映射...
以上就是关于Hibernate单向多对多关联映射的基本介绍和实践。实际应用中,还需考虑性能优化、事务管理、懒加载等问题。通过不断的练习和学习,你可以更熟练地掌握这一重要功能,提升项目开发的效率和质量。
以上就是关于Hibernate中实现多对一单向关联关系的基本知识,包括如何在实体类中定义关联、如何进行数据库操作以及如何查询关联对象。这个源代码示例应该提供了更具体的实现细节,你可以通过查看和运行它来深入理解...
本项目“Hibernate学习:单向多对一关联 工程”专注于讲解Hibernate中的单向多对一关联映射,这是数据库设计中常见的关系类型,尤其在处理具有层次结构的数据时。 单向多对一关联指的是在一个实体类中有一个引用,...
4. **单向关联**:在Hibernate的一对多关联中,如果只有“多”的一方知道“一”的存在,而“一”的一方无法直接访问“多”,就称为单向关联。 5. **映射方式**:映射一对多关联可以通过XML配置文件(hibernate.cfg....
单向一对一映射通常涉及一个实体持有另一个实体的引用,而双向一对一映射则意味着两个实体都可以互相引用。这种关联关系在数据库层面通常通过主键外键约束来实现,但在代码层面则通过注解来表达。 首先,我们需要...
这篇博客文章“hibernate一对多关联映射(单向关联)”将深入讲解如何配置和使用这种映射关系。 在单向关联中,只有一个实体知道另一个实体的存在,也就是说,只有父实体("一"的一端)有对子实体("多"的一端)的...
在关系型数据库中,两个表之间可能存在多对多关联,意味着一个表中的记录可以对应另一表中的多个记录,反之亦然。例如,学生和课程的关系,一个学生可以选修多门课程,而一门课程也可以被多个学生选修。 在...
本教程聚焦于Hibernate中的单向一对多关联映射,这是一个常见的实体关系模型,广泛应用于各种业务场景。 在数据库设计中,一对多关系意味着一个父表记录可以与多个子表记录相关联。例如,一个学生可以有多个课程,...
在数据库设计中,一对多关联是指一个表中的记录可以对应另一个表中的多个记录,例如,一个部门可以有多个员工。在这个场景中,我们将探讨如何使用Hibernate来实现这种关系。 首先,我们来看“连接表”的概念。在一...
在关系数据库中,一对多关联意味着一个表中的记录可以对应另一个表中的多个记录。例如,一个班级可以有多个学生,而每个学生只属于一个班级。在Hibernate中,我们可以通过配置XML映射文件或使用注解来实现这种关联。...
这里我们先讨论单向一对多关联,它是最常见的关联类型之一,一个实体可以拥有多个其他实体实例。例如,一个部门可以有多个员工,但员工并不知道属于哪个部门,这就是单向关联。 **单向一对多关联配置:** 1. **...
本主题将主要聚焦在一对一和一对多关联。 2. **关联的方向性:** 关联可以是单向或双向的。单向关联只能从一个实体访问另一个,而双向关联允许两个实体之间互相访问。 3. **@OneToOne, @OneToMany, @ManyToOne ...
3. `@JoinColumn`: 定义一对一或一对多关系中的外键字段,这里用在`@JoinTable`中,表示多对多关系的连接表中外键的属性。 在上述代码中,`Student`实体有一个`courses`集合,它包含了与之关联的所有`Course`实体。...
本篇文章将详细讲解如何利用Hibernate的注解实现基于连接表的单向一对多关联。 首先,理解一对多关联:在数据库设计中,一对多关联意味着一个实体(表)可以与多个其他实体(表)相对应。例如,一个学生可以有多个...
这里的`many-to-one`元素表示Address与Person的一对多关联,column属性指定了外键列的名称,class属性指定了Person实体的全限定类名,cascade属性可以指定级联操作。 在实际使用中,可以通过Hibernate的Session接口...