Hibernate中的关系映射

zjun Lv4

多对多

1
2
3
4
5
6
@ManyToMany()
@JoinTable(name="t_role_rights",joinColumns={ @JoinColumn(name="right_id")},
inverseJoinColumns={ @JoinColumn(name= "role_id") })
public Set<Role> getRoles() {
return roles;
}

因为多对多之间会通过一张中间表来维护两表直接的关系,所以通过 JoinTable这个注解来声明,name就是指定了中间表的名字,JoinColumns是一个@JoinColumn类型的数组,表示的是我这方在对方中的外键名称,我方是Right,所以在对方外键的名称就是 right_idinverseJoinColumns也是一个@JoinColumn类型的数组,表示的是对方在我这放中的外键名称,对方是Role,所以在我方外键的名称就是 role_id

一对多 和 多对一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//配置客户和联系人之间的关系(一对多关系)
/**
* 使用注解的形式配置多表关系
* 1.声明关系
* @OneToMany : 配置一对多关系
* targetEntity :对方对象的字节码对象
* 2.配置外键(中间表)
* @JoinColumn : 配置外键
* name:外键字段名称
* referencedColumnName:参照的主表的主键字段名称
*
* * 在客户实体类上(一的一方)添加了外键了配置,所以对于客户而言,也具备了维护外键的作用
*
*/

// @OneToMany(targetEntity = LinkMan.class)
// @JoinColumn(name = "lkm_cust_id",referencedColumnName = "cust_id")


/**
* 放弃外键维护权
* mappedBy:对方配置关系的属性名称\
* cascade : 配置级联(可以配置到设置多表的映射关系的注解上)
* CascadeType.all : 所有
* MERGE :更新
* PERSIST :保存
* REMOVE :删除
*
* fetch : 配置关联对象的加载方式
* EAGER :立即加载
* LAZY :延迟加载
*/
@OneToMany(mappedBy = "customer",cascade = CascadeType.ALL)
private Set<LinkMan> linkMans = new HashSet<>();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* 配置联系人到客户的多对一关系
* 使用注解的形式配置多对一关系
* 1.配置表关系
* @ManyToOne : 配置多对一关系
* targetEntity:对方的实体类字节码
* 2.配置外键(中间表)
*
* 配置外键的过程,配置到了多的一方,就会在多的一方维护外键
*
*/
@ManyToOne(targetEntity = Customer.class,fetch = FetchType.LAZY)
@JoinColumn(name = "lkm_cust_id",referencedColumnName = "cust_id")
private Customer customer;
  • 标题: Hibernate中的关系映射
  • 作者: zjun
  • 创建于 : 2007-03-11 21:03:41
  • 更新于 : 2023-11-30 21:14:54
  • 链接: https://zjun.site/2007/03/8ab61ae12607.html
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
此页目录
Hibernate中的关系映射