hibernate中关系映射

 在数据库中数据的对应关系有一对一,一对多和多对一.那么在hibernate中应该如何对应呢?如下:

 一对一:

 假设两个实体,一个实体类为husband,另外一个实体类为wife.一个丈夫只能对应一个妻子,反之亦然.那么在hibernate中使用annotation如下:(husband类)


 1 import javax.persistence.Entity;
2 import javax.persistence.GeneratedValue;
3 import javax.persistence.Id;
4 import javax.persistence.JoinColumn;
5 import javax.persistence.OneToOne;
6
7 @Entity
8 public class Husband {
9 private int id;
10 private String name;
11 private Wife wife;
12
13 @Id
14 @GeneratedValue
15 public int getId() {
16 return id;
17 }
18 public void setId(int id) {
19 this.id = id;
20 }
21 public String getName() {
22 return name;
23 }
24 public void setName(String name) {
25 this.name = name;
26 }
27
28 @OneToOne    //表明是一对一
29 @JoinColumn(name="wifeId") //使用JoinColumn可以更改数据库中对应字段的名字
30 public Wife getWife() {
31 return wife;
32 }
33 public void setWife(Wife wife) {
34 this.wife = wife;
35 }
36 }

 wife类:


 1 import javax.persistence.Entity;
2 import javax.persistence.GeneratedValue;
3 import javax.persistence.Id;
4
5 @Entity
6 public class Wife {
7 private int id;
8 private String name;
9
10 @Id
11 @GeneratedValue
12 public int getId() {
13 return id;
14 }
15 public void setId(int id) {
16 this.id = id;
17 }
18 public String getName() {
19 return name;
20 }
21 public void setName(String name) {
22 this.name = name;
23 }
24 }

 一对多:

 设想一个小组有多个成员,而每一个成员只能加入一个小组.在设计数据的时候,按照常理,人们会把小组的Id设到每个成员中,作为外键;下面分两种情况:

 1.将小组Id设到成员中:


 1 import javax.persistence.Entity;
2 import javax.persistence.GeneratedValue;
3 import javax.persistence.Id;
4 import javax.persistence.Table;
5
6 @Entity
7 @Table(name="t_Group")  //这里注意:因为group是关键字,所以需要将表名更改
8 public class Group {
9 private int id;
10 private String name;
11
12 public String getName() {
13 return name;
14 }
15 public void setName(String name) {
16 this.name = name;
17 }
18 @Id
19 @GeneratedValue
20 public int getId() {
21 return id;
22 }
23 public void setId(int id) {
24 this.id = id;
25 }
26 }

 Person类:


 1 import javax.persistence.Entity;
2 import javax.persistence.GeneratedValue;
3 import javax.persistence.Id;
4 import javax.persistence.ManyToOne;
5
6 @Entity
7 public class Person {
8 private Group group;
9 private int id;
10 private String name;
11
12 @ManyToOne        //表明多个Person对应一个Group
13 public Group getGroup() {
14 return group;
15 }
16
17 @Id
18 @GeneratedValue
19 public int getId() {
20 return id;
21 }
22 public String getName() {
23 return name;
24 }
25 public void setGroup(Group group) {
26 this.group = group;
27 }
28 public void setId(int id) {
29 this.id = id;
30 }
31 public void setName(String name) {
32 this.name = name;
33 }
34 }

 2.将person的Id作为外键设到group中.方法类似于上面.只需将person属性添加到group中并在get方法上添加注解@OneToMany和@JoinColumn(name="groupId"),另外:因为把person添加到group中去了,那么在group实体类中person的返回类型应该是一个数组,Map,Set或者List,个人觉得Set比较好,因为set中元素没有重复的,符合数据库中的规律.所以你的代码应该写成类似这样:


 1 private Set<Person> person = new HashSet<Person>();
2
3 @OneToMany
4 @JoinColumn(name="personId")
5 public Set<Person> getPerson() {
6 return person;
7 }
8 public void setPerson(Set<Person> person) {
9 this.person = person;
10 }

 3.多对多就很简单了,分解为多对一即可.这里就不一一赘述了.

时间: 2024-10-17 01:53:53

hibernate中关系映射的相关文章

ORM进阶之Hibernate中关系映射

ORM进阶之 ORM简介 ORM进阶之Hibernate简介及框架搭 ORM进阶之Hibernate的三大对象 ORM进阶之Hibernate中对象的三大状态解析 ORM进阶之Hibernate中一对一的关系映射 映射可以说是在hibernate中非常重要的一个内容,通过映射可以让程序员不再思考复杂的sql语句,而是更加的专注于业务逻辑的实现.映射通过一个xml配置文件完成并且我们可以对他进行修改!下边我们来看一下如何完成映射的! 单表映射 每个实体对应一张表,跟其他的实体没有关联关系,这是最简

Hibernate中的映射关系(一对多)

在数据库中表和表之间的关系有几种,下面就详细说一下在Hibernate中怎样映射一对多的关系 Hibernate映射一对多的关系,其实就是持久类之间的映射,那如何把持久类关联起来呢??那就用到.hbm.xml文件的<many-to-one>标签了 具体做法如下: 新建一个customer类: package com.jeremy.hibernate.app.example; public class Customer { private Integer customerId; private

hibernate 实体关系映射笔记

@常用属性说明: @Entity:实体类 @Table:指定对应数据表 @Id:主键,使用可以为null值的类型,如果实体类没有保存到数据库是一个临时状态 @Column:配置普通属性,除了主键外,java基本类型的属性 @Base:普通属性的加载方式 @GeneratedValue:主键生成策略 @Temporal:日期类型(DATE,TIME还是TIMESTAMP),如果属性类型是java.util.Date(是以上3个类的父类)类型时才需要使用该@声明具体的日期类型 @Transient:

hibernate 对象关系映射文件详解

POJO 类和数据库的映射文件*.hbm.xml POJO类和关系数据库之间的映射可以用一个XML文档来定义. 映射文件的扩展名为.hbm.xml 在运行时Hibernate将根据这个映射文件来生成各种SQL语句 通过POJO类的数据库映射文件,Hibernate可以理解持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据库表列之间的对应关系 映射文件说明 hibernate-mapping 类层次:class 主键:id 基本类型:property 实体引用类: many-to-one

Hibernate Annotation关系映射, 级联cascade属性

Hibernate Annotation关系映射, 级联cascade属性一. Hibernate Annotation关系映射 1.一对一外键关联映射(单向) 2.一对一外键关联映射(双向) 3.一对一主键关联映射(不重要)在这不演示 在实际中很少用,使用注解@PrimaryKeyJoinColumn 意思是说,我的主键去参考另外一张表中的主键,作为我的主键,但是在我测试使用 注解一对一主键关联映射,在生成表的时候,数据库中并没有生成关联,使用XML 映射可以生成.Annotation注解一对

hibernate继承关系映射和java反射机制的运用

转:http://blog.csdn.net/derpvailzhangfan/article/details/1957946 ,感谢博主分享 Notes:hibernate元数据的运用:uuid的概念:java的反射机制,“因为抽象类无法new出对象来,所以就要用java反射机制”,“TcommTable tomm = (TcommTable) Class.forName(allName).newInstance();”: hibernate继承关系映射大概有5种,这5种继承关系映射里面,我觉

Hibernate框架关系映射

接触Hibernate也有一小段的时间了,愈发的觉得Hibernate是个神奇的东西,为什么这么说呢?因为你可以不懂一行sql,直接面向对象,就可以将数据直接保存到数据库去!! 你还可以保存一个对象,然后一次性的将与它相关的所有数据保存到数据库,比如说,你只需要保存班级对象,就可以将该班级信息和该班级下的所有学生在数据库中形成一堆的记录. 而且都不需要你写sql!!! 有木有很神奇....反正宝宝我是惊呆了. 下面就拿具体的代码实现来讲吧~ 首先讲一个简单的  单向一对多的案例(以班级和学生作为

详谈Hibernate框架关系映射!

接触Hibernate也有一小段的时间了,愈发的觉得Hibernate是个神奇的东西,为什么这么说呢?因为你可以不懂一行sql,直接面向对象,就可以将数据直接保存到数据库去!! 你还可以保存一个对象,然后一次性的将与它相关的所有数据保存到数据库,比如说,你只需要保存班级对象,就可以将该班级信息和该班级下的所有学生在数据库中形成一堆的记录. 而且都不需要你写sql!!! 有木有很神奇....反正宝宝我是惊呆了. 下面就拿具体的代码实现来讲吧~ 首先讲一个简单的  单向一对多的案例(以班级和学生作为

Hibernate对象关系映射(一)

Hibernate的本质是对象关系映射,ORM实现了将对象的变化保存到数据库中.以前我们对关系表操作,执行增CRUD.现在我们不在对关系表进行操作,而是直接对对象操作.对象关系的映射有以下几种 基本图形 图1 一对一映射 分两种情况 主键 唯一外键 1主键 两个对象具有相同的主键,不再有额外字段维护他们的关系 图2 Person和Card之间,他们的主键是相同的 2唯一外键 其实是用来表示多对一的,如果加上唯一限制,就可以表示一对一关联 图3 图3可以看到卡号在person中充当了一个外键. 根