hibernate的@EmbeddedId注解的使用

一,前言

当我们为项目设计表的时候,有时候会需要用复合主键来标识唯一,若项目的持久层采用了hibernate框架,则可以使用@EmbeddedId注解来实现该需求。

二,表设计

CREATE TABLE `mkt_mas_cpcus` (
  `CR_ORG_NBR` decimal(3,0) NOT NULL DEFAULT '0' COMMENT '机构号',
  `CR_ACCT_NBR` decimal(16,0) NOT NULL DEFAULT '0' COMMENT '持卡人代号',
  `CR_STATUS` decimal(1,0) DEFAULT NULL COMMENT '状态',
  `CR_SHORT_NAME` varchar(15) DEFAULT NULL COMMENT '姓名',
  PRIMARY KEY (`CR_ORG_NBR`,`CR_ACCT_NBR`)
)

该表中,机构号CR_ORG_NBR 和 持卡人代号CR_ACCT_NBR 作为复合主键,唯一标识一条数据。

三,创建复合主键类

@Embeddable
public class MasCpcusPK implements Serializable {
    private static final long serialVersionUID = 1L;

    private BigDecimal crAcctNbr; // 持卡人代号
    private BigDecimal crOrgNbr; // 机构号

    public MasCpcusPK() {
    }  
    @Basic
    @Column(name="CR_ACCT_NBR")
    public BigDecimal getCrAcctNbr() {
        return this.crAcctNbr;
    }
    public void setCrAcctNbr(BigDecimal crAcctNbr) {
        this.crAcctNbr = crAcctNbr;
    }
    @Basic
    @Column(name="CR_ORG_NBR")
    public BigDecimal getCrOrgNbr() {
        return this.crOrgNbr;
    }
    public void setCrOrgNbr(BigDecimal crOrgNbr) {
        this.crOrgNbr = crOrgNbr;
    }
}

四,创建po类,采用了hibernate注解

用复合主键代替那两个属性,在get方法上,加上@EmbeddedId注解。

@Entity
@Table(name = "mkt_mas_cpcus", schema = "market", catalog = "")
public class MktMasCpcus implements Serializable {

    private static final long serialVersionUID = -8509123963537411929L;

    private MasCpcusPK id; // 复合主键

    private BigDecimal crStatus; // 客户状态

    private String crShortName; // 姓名

    @EmbeddedId
    public MasCpcusPK getId() {
        return id;
    }

    public void setId(MasCpcusPK id) {
        this.id = id;
    }
    @Basic
    @Column(name = "CR_STATUS")
    public BigDecimal getCrStatus() {
        return crStatus;
    }

    public void setCrStatus(BigDecimal crStatus) {
        this.crStatus = crStatus;
    }

    @Basic
    @Column(name = "CR_SHORT_NAME")
    public String getCrShortName() {
        return crShortName;
    }

    public void setCrShortName(String crShortName) {
        this.crShortName = crShortName;
    }
}

五,创建DAO层

由于是复合主键,那么泛型中的主键就要写这个复合主键MasCpcusPK。

public interface MktMasCpcusDao extends JpaRepository<MktMasCpcus, MasCpcusPK> {

}

若是要调用Dao层的接口,根据id查询的时候,id就要传MasCpcusPK。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值