Hibernate -- 注解(Annotation)关系映射

转自:http://www.cnblogs.com/tyler2000/archive/2011/01/20/1940354.html

1. Hibernate Annotation关系映射有下面几种类型:
1)一对一外键关联映射(单向)

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

3)一对一主键关联映射(不重要)在这不演示

在实际中很少用,使用注解@PrimaryKeyJoinColumn

意思是说,我的主键去参考另外一张表中的主键,作为我的主键,但是在我测试使用

注解一对一主键关联映射,在生成表的时候,数据库中并没有生成关联,使用XML

映射可以生成。Annotation注解一对一主键关联映,有些bug。不过没空去研究它。

因为在实际开发中一对一很少用。在实际开发中我机会没有用过,主键关联就更少了

4)多对一关联映射

5)一对多关联映射(单向)

6)一对多关联映射(双向)

7)多对多关联映射(单向)

8)多对多关联映射(双向)

 

2.介绍各种映射用法

1)一对一外键关联映射(单向)

@OneToOne(cascade=CascadeType.ALL)

@JoinColumn(name="userid",unique=true)

//一对一外键关联,使用@OneToOne,并设置了级联操作

//@JoinColum设置了外键的名称为userid(数据库字段名),如果不设置,则默认为另一类的属性名+ _id

 //外键的值是唯一的(unique),不可重复,与另一类的主键一直

 

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

 Class1里与上面一样,  

   Class2:

@OneToOne(mappedBy="class2",cascade=CascadeType.ALL)

//一对一双向关联关系,使用@OneToOne

//注意:需要加上mappedBy="class2",如果不加上的话,

//Class2也会生成一个外键(class1_id)

//mappedby="class2"需要指向与他关联对象的一个属性

//说明双向关联关系中,有且仅有一端是作为主体(owner)端存在的

//主体端负责维护联接列

//对于不需要维护这种关系的从表则通过mappedBy属性进行声明

//mappedBy的值指向主体的关联属性

//规律:只有是双向关联关系,都加上mappedby

    //cascade=CascadeType.ALL级联

 

4)多对一关联映射

在多的一端配置:

@ManyToOne(targetEntity=Organization.class)

@JoinColumn(name="orgid")

//多对一注解@ManyToOne

//targetEntity指定了关联对象

//@JoinColumn(name="orgid")指定生产的外键的字段名,默认是org_id

 

5)一对多关联映射(单向)

@OneToMany

@JoinColumn(name="orgid")

/**

 * 一对多注解@OneToMany(单向)

 * 如果只写@OneToMany的话,hibernate会建一张中间表来

 * 维护他们之间的关系,

 * 加上@JoinColumn(name="orgid"),则不会建中间表,他会在

 * 多的一端加上外键orgid,来维护他们之间的关系

 */

6)一对多关联映射(双向)

一端:

@OneToMany(mappedBy="org")

@JoinColumn(name="orgid")

/**

 * 一对多双向,在一的一端中设置mappedBy

 * 说明多的一端为主导

 * 如果指定了外键字段名称,则多的一端也需要指定相同的字段名称

 */

 

多端:

@ManyToOne

@JoinColumn(name="orgid")

/**

 * 一对多双向

 * 需要指定外键与一的一端给的外键名称一致,@JoinColumn(name="orgid")

 * 也可以不指定,如果在多的一端不指定,则一的一端也不能指定

 * 否则为生成两个外键

 */

 

7)多对多关联映射(单向)

 

@ManyToMany

/**

 * 多对多映射:注解@ManyToMany(单向)

 * 默认情况下,hibernate会自动的创建一张中间表,

 * 来维护多对多关系

 * 默认中间表的名称 :user_role中间表,字段的名称user_id role_id

 * 如果想更换表名和字段名称,注解如下:

 */

@JoinTable(name="t_u_r",

")},

")}

)

 

8)多对多关联映射(双向)  User端

@ManyToMany

/**

 * 多对多映射:注解@ManyToMany(单向)

 * 默认情况下,hibernate会自动的创建一张中间表,

 * 来维护多对多关系

 * 默认中间表的名称 :user_role中间表,字段的名称user_id role_id

 * 如果想更换表名和字段名称,注解如下:

 */

@JoinTable(name="t_u_r",

")},

")}

)

/**

 * @JoinTable(name="t_u_r",

 * 指定中间表的表名

 * ")},

 * 指定当前对象的外键

 * ")}

 * 指定关联对象的外键

 */

 

Role端

@ManyToMany(mappedBy="role")

/**

 * 多对多,双向关联映射

 *

时间: 2024-12-11 05:40:00

Hibernate -- 注解(Annotation)关系映射的相关文章

菜鸟问一个hibernate关于继承关系映射的配置问题

问题描述 菜鸟问一个hibernate关于继承关系映射的配置问题 按照教学视频配置: <class name="Employee" discriminator-value = "0"> <id name="id"> <generator class="native"></generator> </id> <property name="name&quo

用注解的关系映射会产生中间表

问题描述 @ManyToOne() @JoinColumn(name="book_user_id",nullable=false)public user getUser() {return user;}@OneToMany(cascade={CascadeType.ALL})public Set<book> getBook() {return book;}关系映射后产生了中间表而且我在配置文件里配置显示sql,但是编译的时候没有显示表创建的sql语句 解决方案 编译的时候不

【hibernate框架】关系映射之一对一单项外键关联(Annotation实现)

一对一单向外键关联(Annotation做法): 例子,假设一夫配一妻(Husband与Wife).两个实体类的例子: Husband.java: package cn.edu.hpu.one2one; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToOne; @Entity pu

【hibernate框架】关系映射之一对一单向外键关联(XML实现)

在XML里面如何单向关联: 学生证与学生卡是一对一的关系,在学生证那一方做关联 Student.java: package cn.edu.hpu.model; public class Student { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String g

Hibernate实体关系映射—Annotation

hibernate实体关系映射分为:     单边一对一,双边一对一:     单边一对多,单边多对一:     双边一对多,双边多对一:     单边多对多,双边多对多:     以及主键相同的单双边一对一.下面分别总结这几种关系映射的注解方法: 1.  单边一对一和双边一对一     单边一对一:比如一个学生(Student)有一个学生证(StudentCard),且Student类中有一个StudentCard对象: [java] view plain copy   @Entity    

【HIBERNATE框架开发之七】HIBERNATE使用ANNOTATION中各种关系映射的CRUD(增删改查)&amp;&amp;集合映射&amp;&amp;继承映射

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/hibernate/822.html       首先对于Annotation中CRUD的C(Create)操作:-------- 假设 :   User (MonyToOne)       Group OK,那么有如下 Junit Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Conf

Hibernate及JPA 对象关系映射的简单映射策略

简单映射 近年来 ORM(Object-Relational Mapping,对象关系映射,即实体对象和数据库表的映射)技术市场 热闹非凡,各种各样的持久化框架应运而生,其中影响最大的是 Hibernate 和 Toplink.Sun 公司在充分吸收现有的优秀 ORM 尤其是 Hibernate 框架设计思想的基础上,制定了新的 JPA(Java Persistence API)规范,对现在乱象丛生的持久 化市场带来一个标准,大有统一持久化市场的气势.JPA 是通过 JDK5.0 注解或 XML

第十章 基于Annotation的关系映射 一对一

如果下面部分内容有不明白的可以查找: 基于Annotation的关系映射 前期准备:http://blog.csdn.net/p_3er/article/details/9061911 基于映射文件共享主键方式实现一对一:http://blog.csdn.net/p_3er/article/details/9004419 基于映射文件唯一外键式实现一对一:http://blog.csdn.net/p_3er/article/details/9004471 1.共享主键方式: Person: @E

第十章 基于Annotation的关系映射 多对一与一对多

如果下面部分内容有不明白的可以查找: 基于Annotation的关系映射 前期准备:http://blog.csdn.net/p_3er/article/details/9061911 基于xml的多对一:http://blog.csdn.net/p_3er/article/details/9036759 基于xml的一对多:http://blog.csdn.net/p_3er/article/details/9036921 本文是把多对一与一对多结合起来了,形成一个双向的映射.如果只想要单向的