【hibernate框架】关于多对一与一对多关系的剖析

关于一对多,举个例子,一个用户组可以包含多个用户,每个用户只能属于一个用户组。一个人可以有多辆车,每辆车只能属于一个人。这些都是一对多的关系。

打个比方,一个人可以有多辆车,每辆车只能属于一个人。

两张表,一张表Person,一张表Car。关键是他们两个之间在数据库表中怎么设计关联呢?

Person id<int> name<vechar>; 
Car id<int> color<vachar>;

错误做法:
1.在一方加冗余
Person id<int> name<vechar> car_id<int>; 
Car id<int> color<vachar>;

为什么会产生冗余?如果有一个人id=1,name=zhangsan,他有两辆车,一辆颜色为红色,一辆颜色为黄色,这样就要存两个字段
id=1,name=zhangsan,car_id=1
id=1,name=zhangsan,car_id=2

解决办法:person取消car_id字段,在car一方加一个person_id(因为一辆车只能属于一个人).
即是“在多方加外键”的方式。

三大范式:
1.要有主键,列不可分
2.联合主键的情况不能出现部分依赖
3.不能存在传递依赖

原则:不要让数据产生冗余!同样的数据存一份就可以。

但老鸟的原则是:具体问题,具体分析,实事求是。

转载请注明出处:http://blog.csdn.net/acmman

时间: 2024-10-02 05:44:54

【hibernate框架】关于多对一与一对多关系的剖析的相关文章

【hibernate框架】多对多单向关联(Annotation实现)

什么情况下是多对多? 举个例子:一个老师可以教多个学生,每个学生也可以被多个老师教.这就是多对多的情况. 在数据库表中这种关系该怎么设计?很简单,加一张中间表. 设计模型: table_student id<int> <pk> table_teacher id<int> <pk> 中间表: T_S t_id<int> <pk,fk2> s_id<int> <pk,fk1> 比如老师2教学生1,在中间表中就存2,

【hibernate框架】多对一单向关联(Annotation实现)

一个组有多个用户,一个用户只能属于一个组. 使用Annotation注解来实现多对一单项关联 Group.java: package cn.edu.hpu.many2one; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="t_grou

【hibernate框架】多对多单向关联(XML实现)

什么情况下是多对多? 举个例子:一个老师可以教多个学生,每个学生也可以被多个老师教.这就是多对多的情况. 在数据库表中这种关系该怎么设计?很简单,加一张中间表. 设计模型: table_student id<int> <pk> table_teacher id<int> <pk> 中间表: T_S t_id<int> <pk,fk2> s_id<int> <pk,fk1> 比如老师2教学生1,在中间表中就存2,

【hibernate框架】多对一单向关联(XML实现)

一个组有多个用户,一个用户只能属于一个组. 使用XML来实现多对一单项关联 Group.java: package cn.edu.hpu.many2one; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; public class Group { private int id;

【hibernate框架】多对多双向关联(XML实现)

多对多的双向关联:(非常少用) 通过老师可以知道他教了多少学生,这是单项多对多.而如果同时通过学生知道有多少个老师教他,那么就是多对多双向的关联. XML实现: Student.java: package cn.edu.hpu.many2many; import java.util.HashSet; import java.util.Set; public class Student { private int id; private String name; private Set<Teach

hibernate-eclipse如何利用数据库反向生成Hibernate多对多、一对多实体类(生成全部为int类型)。

问题描述 eclipse如何利用数据库反向生成Hibernate多对多.一对多实体类(生成全部为int类型). 如题 解决方案 如果你表的关系建好了,,直接通过dataSource就能反向生成了 解决方案二: Myeclipse 连接到你的数据库,在对应的表上右击,点hibernate reserve ,然后一步步操作下去,就会成功 解决方案三: /* SQLyog Ultimate v10.00 Beta1 MySQL - 5.6.26-log : Database - db_template

hibernate 同一个类中多对一,一对多,不会用,请指教,讲解一下,最好是告诉我如何遍历

问题描述 <p>hibernate 同一个类中多对一,一对多,不会用,请指教,讲解一下,最好是告诉我如何遍历userlist = userService.searchAll();这个结果集的容器的内容,用System.out.println(userlist);输出的是[com.test.bean.User@1ee5806, com.test.bean.User@708d23, com.test.bean.User@12bc86d, com.test.bean.User@1738d88, co

hibernate映射xml文件配置之一对多,多对多

  一对多配置 [1]班级和学生模型 --->班级可容纳多个学生 --->学生只能属于一个班级 [2]一对多配置中的关系维护(inverse) --->一端放弃关系的维护 --->多端进行关系维护. inverse默认值false,表示不放弃关系的维护. inverse="true"配置在那一端,表示那一端放弃关系的维护(交由hibernate内部进行维护),由另一端进行关系维护. 班级的ClassRoom.hbm.xml的配置文件 1 <?xml ver

Java的Hibernate框架中一对多的单向和双向关联映射_java

一.一对多单向关联映射 一对多关系的对象模型在日常生活中也经常看到,就拿学生和班级来说,一个班级里有多个学生,所以班级和学生的关系是一对多的关系,映射到对象模型中,如下图: 对象模型说明了这种一对多的关系是由一的一端来维护的,那么映射成关系模型就是一个班级字段下面会有多个学生,这样就形成了一对多的关系,通过班级能够查询获得学生信息,对应的关系模型如下图: 1.基本配置 有了对象模型接下来就让它们映射为对应的关系代码,在进行关系映射时需要在一的一端添加<one-to-many>标签,另外还需要在