一对多、多对一关联:在多方加外键

示例:Group(一方)和User(多方),一个Group可以有多个User,每个User只能属于一个Group

 

多对一单向关联

在User(多方)中建Group(一方)对象,并添加@ManyToOne注解

1.建Group实体类和User实体类,添加Annotation注解,如下

@Entity
@Table(name="_group") //group在MySQL中是关键字,不能直接做表名
public class Group {
private int id;
private String name;
@Id
@GeneratedValue
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;
}
}

 

@Entity
@Table(name="_user") //为了和表_group保持一致,也用一个别名
public class User {
private int id;
private String name; private Group group; @Id
@GeneratedValue
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;
} @ManyToOne //多对一关联
// @JoinColumn(name="groupId") //任意指定生成的外键名
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
}

 

2.在hibernate.cfg.xml中添加mapping语句

<mapping class="com.hibernate.model.Group"/>
<mapping class="com.hibernate.model.User"/>

3.建Junit测试类

public class ORMappingTest {

	@Test
public void test() {
new SchemaExport(new Configuration().configure()).create(true, true);
}
}

程序至此结束,运行程序,在数据库中生成表_group和表_user,并在控制台输出建表语句。

_user表中会自动生成属性名为group_id的外键,可用@JoinColumn注解修改其属性名

 

一对多单向关联

在Group(一方)中建User(多方)对象,此对象采用Set集合形式

并添加@ManyToOne和@JoinColumn注解(必须添加)

1.建Group实体类和User实体类,添加Annotation注解,如下

@Entity
@Table(name="_group") //group在MySQL中是关键字,不能直接做表名
public class Group {
private int id;
private String name; private Set<User> users = new HashSet<User>(); //新建Set集合形式的多方对象users @Id
@GeneratedValue
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;
} @OneToMany //一对多关联
@JoinColumn(name="groupId") //若不添加该属性,则会在数据库中生成三张表。
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
}

 

@Entity
@Table(name="_user") //为了和表_group保持一致,也用一个别名
public class User {
private int id;
private String name; @Id
@GeneratedValue
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;
}
}

2.在hibernate.cfg.xml中添加mapping语句----同上

3.建Junit测试类----同上

程序至此结束,运行程序,会在数据库中生成表_group和表_user,并在控制台输出建表语句

_user表中会生成指定属性名的外键

 

一对多、多对一双向关联

在User中建Group对象,并添加@ManyToOne注解;在Group中建User对象,并添加@OneToMany注解

1.建Group实体类和User实体类,添加Annotation注解

User类同“多对一单向关联”部分的User类

Group类,如下:

@Entity
@Table(name="_group") //group在MySQL中是关键字,不能直接做表名
public class Group {
private int id;
private String name; private Set<User> users = new HashSet<User>(); @Id
@GeneratedValue
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;
} @OneToMany(mappedBy="group") //这里的"group"是指User类中的private Group group;
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
}

 

2.在hibernate.cfg.xml中添加mapping语句----同上

3.建Junit测试类----同上

程序至此结束,

运行程序,会在数据库中生成表_group和表_user,并在控制台输出建表语句

_user表中会自动生成属性名为group_id的外键,可用@JoinColumn注解修改其属性名

 

@mappedBy含义

1.单向关系不需要设置该属性,双向关系必须设置,避免双方都建立外键字段

2.只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性

3.mappedBy跟JoinColumn/JoinTable总是处于互斥的一方

 

以Group(一方)和User(多方)为例,

外键在User(多方),@JoinColumn/@JoinTable则只能设置在User(多方)。

则@mappedBy设置在Group(一方)。表明此关联关系是由User(多方)维护的。

Hibernate一对多、多对一关联的更多相关文章

  1. Hibernate ManyToOne Mappings 多对一关联映射

    Hibernate ManyToOne Mappings 多对一关联映射 Hibernate框架的使用步骤: 1.创建Hibernate的配置文件(hibernate.cfg.xml)2.创建持久化类 ...

  2. Hibernate 一对多/多对多

    一对多关联(多对一): 一对多关联映射: 在多的一端添加一个外键指向一的一端,它维护的关系是一指向多 多对一关联映射: 咋多的一端加入一个外键指向一的一端,它维护的关系是多指向一 在配置文件中添加: ...

  3. Hibernate 配置双向多对多关联

    本文解决问题:Hibernate 中配置项目(Project) 员工(Employee)   双向多对多关联 方案一:直接配置双向多对多 方案二:配置第三个关联类(xml)   将多对多查分开来(形成 ...

  4. Hibernate一对多(多对一)关联关系

    上一篇博文总结了 Hibernate 的一对一的关联关系, 包括基于主键的单向一对一, 基于外键的单向一对一, 基于外键的双向一对一. 下面咱们说一下 Hibernate 的一对多关联关系. 其实一对 ...

  5. hibernate一对多多对一双向

    注意事项:一对多,多对一双向关联,在一的一方的多的getSet集合上的oneToMany上加上mappedBy.告诉hibernate由多的方一来维护关系.这也符合逻辑 ,本来外键就是在加在多的一方. ...

  6. hibernate 一对多 多对一 关系表 增删改查大礼包ps二级查也有

    今天来到混元气功 这货大概的意思就是你中有我 我中有你 ps 这里就要说到维护关系 ps写这个用了我一下午.......也是刚刚好复习到这里 顺便就写写 注意:一般都在多方维护关系,至于是用单向还是用 ...

  7. 6.Hibernate单向的多对一 关联映射

    1.创建如下项目结构 2.在项目的src下创建hibernate.cfg.xml主配置文件 <?xml version="1.0" encoding="UTF-8& ...

  8. Hibernate框架单向多对一关联映射关系

    建立多对一的单向关联关系    Emp.java            private Integer empNo //员工编号            private String empName / ...

  9. Hibernate框架双向多对多关联映射关系

    建立双向多对多关联关系    Project.java (项目表)                private Integer proid;                private Strin ...

  10. Hibernate框架单向多对多关联映射关系

    建立单向多对多关联关系    Project.java (项目表)                private Integer proid;                private Strin ...

随机推荐

  1. is char signed or unsigned?

    工作这么多年,一直认为char是有符号的,而事实上gcc和vs默认也是有符号,但是c规范里实际并没有指明char是有符号还是无符号,所以char比较特殊, char signed char unsig ...

  2. hadoop工作相关

    网站点击流日志分析,客户画像,推荐系统,bi系统

  3. svn备份一般采用三种方式

    http://www.cnblogs.com/itech/archive/2011/10/11/2206988.html 备份策略 ============== svn备份一般采用三种方式:1)svn ...

  4. Eclipse 运行程序

    运行 Java 程序 我们可以在 Package Explorer 视图 可以在 Package Explorer 视图中快速运行 Java 程序. Package Explorer 视图: 鼠标右击 ...

  5. dm8148 开发只boot启动参数vram=128简介

    显存 全称显示内存,即显示卡专用内存.显存对于显卡就好比内存对于整台电脑,地位非常重要,它负责存储显示芯片需要处理的各种数据.显存容量的大小.性能的高低,直接影响着电脑的显示效果.目前,工作站显卡常用 ...

  6. makefile编写---.a静态库的生成和调用

    #.SUFFIXES: .c .o Cc =gcc #OSA=/data/users/osa IncDir=-I. -I./ Debug = -g Cflags = -c $(DEBUG) Libs ...

  7. tinycore Network card configuration during exec bootlocal.sh

    question: tinycore在boot时, 运行bootlocal.sh脚本,其中有局域网通信的部分,一直跑不通,测试了一下才知道是运行bootlocal.sh的阶段,网络可能没有配置好,ip ...

  8. 扒一扒asp.net core mvc控制器的寻找流程

    不太会排版,大家将就看吧. asp.net core mvc和asp.net mvc中都有一个比较有意思的而又被大家容易忽略的功能,控制器可以写在非Web程序集中,比如Web程序集:"MyW ...

  9. azure绑定ssl,godaddy的ssl证书

    域名是godaddy 申请的,证书也是godaddy 购买的,DV证书. godaddy购买证书后,申请ssl,需要输入,csr.网上找的csr生成工具,我使用  https://myssl.com/ ...

  10. CodeIgniter框架——源码分析之CodeIgniter.php

    CodeIgniter.php可以说是CI的核心,大部分MVC的流程都是在这个文件夹中处理的,其中加载了很多外部文件,完成CI的一次完整流程. 首先是定义了CI的版本(此处为CI 2.2.0),接下来 ...