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

好久没写文章了。最近开发项目很紧,忙的要命= =。这段时间有时间就会把项目中的一些问题所设计到的知识点进行整理。今天就来聊一下如何使用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
@Data
public 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)
@Data
public 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形成的联合主键的表啦。

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值