主键为多个字段的映射问题

本文探讨了在Hibernate中处理复合主键的情况,包括使用组件作为复合主键和多列作为联合主键。对于组件主键,需要满足有无参构造函数、实现Serializable接口以及重写equals()和hashCode()方法。使用@EmbeddedId进行标识,并通过@AttributeOverride定义映射。而对于多列联合主键,可以直接用@Id修饰多个属性,同样要求类实现Serializable接口并重写相关方法。
摘要由CSDN通过智能技术生成

在同常情况下,Hibernate建议为持久化类定义一个标识属性,用于唯一地标识某个持久化实例。

对于主键只有一个字段的情况来说,用@Id进行标识就行了,此处不多说。

问题是当标识属性对应多个字段时,该怎么办呢?

组件作为符合主键

使用组件作为复合主键,也就是使用组件作为持久化类的标识符,则该组件类必须满足以下要求:
1. 有无参的构造函数。
2. 必须实现java.io.Serializable接口。
3. 建议正确地重写equals()和hashCode()方法,也就是根据组件类的关键属性来区分组件对象。

当使用组件作为复合主键时,Hibernate无法为这种复合主键生成主键值,所以程序必须为持久化实例分配这种组件标识符(即它不像id一样指定生成的策略之后就可以自动的生成对应的值,需要我们手动的赋值给它)。

下面看一个组件类的例子:

// 1. 实现Serializable接口
public class Name implements Serializable{
   
    private String first;

    private String last;

    // 2. 无参的构造函数
    public Name() {
    }

    public Name(String first, String last) {
        this.first = first;
        this.last = last;
    }

    // 3. 重写equals()和hashCode()方法
    @Override
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值