`
hyperprice
  • 浏览: 50863 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一对多(One2Many)

阅读更多
一对多(one2many)实现的方法为:

* 1、发现对象、创建实体类。例如:班级(classes)和学生(Student),班级中的属性有int id,String name(多对一的关系,多个学生对应一个班级,后期的实现

为 先创建学生,然后班级添加学生即可,班级要定义个Set接口的变量(因为Set是不重复的)例如,private Set student;)

* 2、创建类的映射文件(hbm)先从简单的映射做起,例如student中只有id和name。(如果映射中的路径重复出现的话可以在<hibernate-mapping>中定义package,更为
方便的来写路径),然后定义classes的hbm文件 其它字段正常定义 但 外键的定义有变化,代码为:<set name="students"> (classes中定义的Set 的 变量)
<key column="classesid"/> (数据库中列的名字)
<one-to-many class="Student"/> (外键对应的类)
</set>
* 3、以上步骤都完毕的话就可以生成表了,注意一点classesid的列属性 把非空去掉为允许为空,这也是一对多的弊端,这些会在笔记的后面做注释。

* 4、然后可以创建测试类代码如下:


session.beginTransaction();

Student student1 = new Student();
student1.setName("10");
session.save(student1);
//创建一个学生信息要save下,不然后面会抛出异常;

Student student2 = new Student();
student2.setName("祖儿");
session.save(student2);

Set students = new HashSet();
students.add(student1);
students.add(student2);

Classes classes = new Classes();
classes.setName("尚学堂");
classes.setStudents(students);

//可以正确保存
session.save(classes);

session.getTransaction().commit();

//以上的执行过程为,创建学生信息(classesid暂时为空)--然后保存--然后创建班级信息--然后添加学生信息--然后save--hibernate会执行update把班级id

更新到学生信息为空的classesid中;



* 5、读取的测试类代码如下:

session.beginTransaction();

Classes classes = (Classes)session.load(Classes.class, 1); //读取classes中id为1的信息;
System.out.println("classes.name=" + classes.getName()); //输出classes id为1的name;
Set students = classes.getStudents();
for (Iterator iter=students.iterator(); iter.hasNext();) { //通过迭代取出classesid对应的学生name 列出;
Student student = (Student)iter.next();
System.out.println("student.name=" + student.getName());
}
session.getTransaction().commit();




注:在一一端维护关系的缺点:
* 如果将t_student表里的classesid字段设置为非空,则无法保存
* 因为不是在student这一端维护关系,所以student不知道是哪个班的,
  所以需要发出多余的update语句来更新关系

例子可以参考尚学堂的代码;
分享到:
评论

相关推荐

    One2Many

    假设我们有`Student`和`Course`两个实体,`Student`有一对多的`Course`。在Mybatis的映射文件中,`Student`的映射可能如下: ```xml &lt;!-- 其他字段映射... --&gt; SELECT * FROM course WHERE student_id ...

    hibernate中one2many映射

    在Java的持久化框架Hibernate中,One-to-Many映射是一种常见的关系映射方式,它表示一个实体(比如一个用户)可以与多个其他实体(比如用户的订单)进行关联。在这个场景下,"用户"是一方,称为"One","订单"是另...

    NHibernate One-to-Many一对多映射-xxlinux_com

    在数据库世界中,一对多(One-to-Many)关系是一种常见的关联类型,其中一个表(父表)可以与多个其他表(子表)相关联。在NHibernate中,配置这种映射关系对于理解和使用ORM至关重要。 一对多关系意味着一个实体...

    Mybaits-one2many

    在本案例 "Mybaits-one2many" 中,我们将探讨如何实现一对多的关系查询,并且通过实践来理解这种映射关系。 首先,我们需要了解一对多关系的基本概念。在数据库设计中,如果一个表(如用户表)的某一行可以与另一个...

    Hibernate one-to-many / many-to-one关系映射

    一、一对一(one-to-one)与一对多(one-to-many)关系 1. 一对一关系: 在现实世界中,如一个人只有一个身份证,这就是典型的"一对一"关系。在Hibernate中,可以通过@OneToOne注解实现。这种关系通常需要使用外键...

    hibernate many-to-one(多对一)及 cascade(级联).doc

    在数据库设计中,实体之间的关系主要包括一对一、一对多、多对多等几种类型。而在ORM(对象关系映射)框架Hibernate中,通过不同的注解或者XML配置来表示这些关系。其中,`many-to-one`(多对一)关系是较为常见的一...

    hibernate_1700_one2many_many2one_bi_crud(5)

    标题中的“hibernate_1700_one2many_many2one_bi_crud(5)”指的是一项关于Hibernate框架的教程,重点在于介绍一对多(One-to-Many)和多对一(Many-to-One)双向关联关系的创建、读取、更新和删除(CRUD)操作。...

    hiberante - one to many - update

    标题中的“Hibernate - one to many - update”指向的是一个关于Hibernate框架中的一对多关联关系在更新操作时的专题。Hibernate是Java开发中常用的持久化框架,它简化了数据库操作,使得开发者可以更加关注业务逻辑...

    ibatis one to many mapping

    1. `ibatis one to many.htm` - 这个文件可能包含了 iBatis 一对多映射的基础知识和配置示例。 2. `ibatis多对多映射3.htm` - 可能是关于多对多映射的高级用法或特定场景的处理方法。 3. `ibatis配置多表关联(一对...

    (4)Hibernate中的many-to-one和one-to-many关系

    本话题主要探讨两种基本的关系映射类型:many-to-one(多对一)和one-to-many(一对多)。这两种关系映射是数据库中常见的关联类型,理解和掌握它们对于开发高质量的Java应用至关重要。 1. many-to-one关系 many-to...

    hibernate_many2one

    其中,many2one是一种常见的关系类型,用于表示数据库表之间的多对一关联。 ### Hibernate many2one 关系详解 #### 1. 概念解释 在Hibernate中,`many2one`关系表示多个实体可以与单个实体关联。例如,在一个学校...

    Hibernate one to many(many to one) 配置

    标题"Hibernate one to many(many to one) 配置"涉及到的是关系型数据库在Java中的持久化框架Hibernate中的两种关联映射关系:一对一(One-to-One)和多对一(Many-to-One)。在数据库设计中,这种关系很常见,例如...

    hibernate many to one

    无需特殊配置,因为一对一关系的维护通常在多方(这里的Student)进行。 ### 2. 注解映射 使用注解的方式更加简洁。在实体类上添加`@ManyToOne`注解: - 在`Student`类: ```java @Entity public class Student {...

    mappedBy属性:one2many

    在处理一对多(One-to-Many)关系时,`mappedBy`属性扮演了关键角色。这篇博客文章,虽然描述为空,但链接指向了一个可能深入讨论`mappedBy`特性的资源。 `mappedBy`属性是Hibernate中用于定义关联关系的一个关键...

    MyBatis注解配置映射器:一对多关系的实现

    在这个结果映射中,使用`@One`或`@Many`注解来表示一对多关系。`@One`用于单个关联,`@Many`用于多个关联。 例如,`@ResultMap`可以这样配置: ```java @ResultMap(value = "studentWithCoursesMap", type = ...

    hibernate学习5之one-to-many双向关联.docx

    在配置双向一对多关联时,我们通常在"多"一端(这里是`Student`)的集合属性上使用`&lt;many-to-one&gt;`标签,将`Classes`对象映射到数据库中的外键。同时,在"一"端(`Classes`)使用`&lt;set&gt;`标签,表示班级可以包含多个...

    myBatis一对一和一对多

    在实际的项目开发中,我们经常遇到一对一(One-to-One)和一对多(One-to-Many)的关系映射,这两种关系在数据库设计中非常常见。本主题将详细探讨在MyBatis中如何实现一对一和一对多的映射。 ### 一对一映射(One-...

    Hibernate Mapping Many-to-One 实例 内附源代码及附件下载

    本实例将详细讲解如何在Hibernate中实现Many-to-One关系映射,这是一种常见的数据库关联,表示一个实体可以与多个其他实体相关联。 在Many-to-One关系中,通常一个实体(如部门)可以有多个相关实体(如员工),而...

    Mybatis-many2one

    在这个"Many2One"例子中,我们将探讨如何在Mybatis中实现多对一的关系映射。 在关系型数据库中,多对一(ManyToOne)关系表示一个实体(例如,学生)可以与多个其他实体(例如,班级)关联,但一个实体(班级)可以...

    Hibernate-one-to-many

    ### Hibernate一对多关系详解 在Hibernate框架中,处理实体间的关系是常见的需求,尤其是在复杂的业务逻辑中。本文将深入探讨Hibernate中一对多(One-to-Many)关系的处理方式,特别是通过外键映射和inverse属性的...

Global site tag (gtag.js) - Google Analytics