java关于hibernate如何基于注解创建联合主键

来源:互联网 发布:广州恒大淘宝 编辑:程序博客网 时间:2024/06/05 09:05

好久没写文章了。最近开发项目很紧,忙的要命= =。这段时间有时间就会把项目中的一些问题所设计到的知识点进行整理。今天就来聊一下如何使用hibernate创建一个联合主键的表。

需求:在进行表设计时,我需要一张中间表来进行多对多关联。

提到中间表我们自然就想到了联合主键,我们现在这张中间表有四个列,两个联合主键以及两个中间表自带的字段。

第一步:创建一个类来确定在中间表的domain映射关系中哪几个是联合主键的类

package com.maxrocky.expressageservice.domain.module;import lombok.Data;import javax.persistence.Embeddable;import java.io.Serializable;/** * Created by beyondLi on 2017/6/27. * 联合主键使用 */@Embeddable@Datapublic class UserModuleRelevanceKey implements Serializable {    //员工id    private Integer staffId;    //对应的权限id    private Integer moduleId;}

注!这里的属性名字一定要和你映射关系的domain中你要做联合主键的属性名字一样,否则会报错。(@Data是lombok,与hibernate无关,去除此注解生成getset方法效果一样)

第二步:创建中间表的映射

package com.maxrocky.expressageservice.domain.module;import lombok.Data;import javax.persistence.*;import java.time.LocalDateTime;/** * Created by beyondLi on 2017/6/27. * 账号 模块中间关联表 */@Entity@Table(name = "user_module_relevance")@IdClass(UserModuleRelevanceKey.class)@Datapublic class UserModuleRelevance {    //员工id    @Id    @Column(name = "staff_id")    private Integer staffId;    //对应的权限id    @Id    @Column(name = "module_id")    private Integer moduleId;    //创建时间    @Column(name = "create_date")    private LocalDateTime createDate;    //修改时间    @Column(name = "modify_date")    private LocalDateTime modifyDate;}

结果如图所示
这里写图片描述

好了,这样就大功告成了。如果hibernate设置的是自动创建表,只要运行项目就会生成一张staffId与moduleId形成的联合主键的表啦。

以上观点仅为个人理解,如果不足或错误,望指出,共同成长。

原创粉丝点击