Spring Data JPA 建立表的联合主键

 更新时间:2019年04月12日 14:10:03   作者:roseduan  
这篇文章主要介绍了Spring Data JPA 建立表的联合主键。本文详细的介绍了2种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

最近遇到了一个小的问题,就是怎么使用 Spring Data JPA 建立表的联合主键?然后探索出了下面的两种方式。

第一种方式:

第一种方式是直接在类属性上面的两个字段都加上 @Id 注解,就像下面这样,给 stuNo 和 stuName 这两个字段加上联合主键:

@Entity
@Table(name = "student")
public class Student {

  @Id
  @Column(name = "stu_no", nullable = false, length = 11)
  private Integer stuNo;

  @Id
  @Column(name = "stu_name", nullable = false, length = 128)
  private String stuName;

  @Column(name = "stu_age", nullable = false, length = 3)
  private Integer stuAge;

  @Column(name = "class_id", nullable = false, length = 8)
  private String classId;
}

只不过需要注意的是,实体类需要实现 Serializable 接口。

这种方式不是很好,虽然可以成功的创建表,但是使用 JpaRepository 的时候,需要指定主键 ID 的类型,这时候就会报错,所以使用第二种方式更好。

第二种方式:

实现起来也很简单,我们需要新建一个类,还是以 stuNo 和 stuName 建立联合主键,这个类需要实现 Serializable 接口。

public class StudentUPK implements Serializable {

  private Integer stuNo;

  private String stuName;

}

然后在实体类 Student 上面加上 @IdClass 注解,两个字段上面还是加上 @Id 注解:

@Entity
@IdClass(StudentUPK.class)
@Table(name = "student")
public class Student {

  @Id
  @Column(name = "stu_no", nullable = false, length = 11)
  private Integer stuNo;

  @Id
  @Column(name = "stu_name", nullable = false, length = 128)
  private String stuName;

  @Column(name = "stu_age", nullable = false, length = 3)
  private Integer stuAge;

  @Column(name = "class_id", nullable = false, length = 8)
  private String classId;
}

这样就能成功的创建表了,而且在使用 JpaRepoistory 的时候,可以指定主键为那个 StudentUPK 类,就像这样:public interface StudentRepository extends JpaRepository<Student, StudentUPK> 。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 如何将Set直接转成数组

    如何将Set直接转成数组

    这篇文章主要介绍了如何将Set直接转成数组,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • SpringCloud @FeignClient注入Spring容器原理分析

    SpringCloud @FeignClient注入Spring容器原理分析

    本文详细分析了Spring Boot中@FeignClient注解的扫描和注入过程,重点探讨了@EnableFeignClients注解的工作原理,通过源码分析,揭示了@EnableFeignClients如何通过@Import注解和FeignClientsRegistrar类实现bean定义的加载
    2024-12-12
  • java并发请求下数据插入重复问题的解决方法

    java并发请求下数据插入重复问题的解决方法

    现在遇到一个项目,移动设备存储数据,然后一起上传,那就出现了许多重复数据,这篇文章主要给大家介绍了关于java并发请求下数据插入重复问题的解决方法,需要的朋友可以参考下
    2021-11-11
  • Spring aop失效的几种解决方案

    Spring aop失效的几种解决方案

    这篇文章主要介绍了Spring aop失效的几种解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • MapTask工作机制图文详解

    MapTask工作机制图文详解

    今天小编就为大家分享一篇关于MapTask工作机制图文详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Java 函数编程详细介绍

    Java 函数编程详细介绍

    这篇文章主要介绍了Java函数式编程,lambda表达式可以被认为是一个匿名函数,可以在函数接口的上下文中使用。函数接口是只指定一个抽象方法的接口,下面来看文章的详细内容,需要的朋友可以参考下
    2021-11-11
  • Java中守护线程介绍及使用

    Java中守护线程介绍及使用

    大家好,本篇文章主要讲的是Java中守护线程介绍及使用,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Java 8函数式接口之Consumer用法示例详解

    Java 8函数式接口之Consumer用法示例详解

    这篇文章主要为大家介绍了Java 8函数式接口之Consumer用法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • SpringBoot快速整合通用Mapper的示例代码

    SpringBoot快速整合通用Mapper的示例代码

    后端业务开发,每个表都要用到单表的 增删改查 等通用方法,而配置了通用Mapper可以极大的方便使用Mybatis单表的增删改查操作,这篇文章主要介绍了SpringBoot快速整合通用Mapper,需要的朋友可以参考下
    2022-07-07
  • Java数据结构优先队列实练

    Java数据结构优先队列实练

    通常都把队列比喻成排队买东西,大家都很守秩序,先排队的人就先买东西。但是优先队列有所不同,它不遵循先进先出的规则,而是根据队列中元素的优先权,优先权最大的先被取出,这篇文章主要介绍了java优先队列的真题,感兴趣的朋友一起看看吧
    2022-07-07

最新评论