🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
联合主键策略有如下几种方式。 [TOC] # 1. `@IdClass`与`@Id`组合 **1. 创建一个主键类** ```java @Data public class PersonPk implements Serializable { private String id; private String username; } ``` **2. 使用注解`@IdClass`将主键类引入到当前实体类中并在对应的字段标记注解`@Id`** ```java @Data @Entity @IdClass(PersonPk.class) @Table(name = "tb_person") public class Person { @Id private String id; @Id @Column(name = "username") private String username; @Column(name = "age") private Integer age; } ``` **3. 接口的主键类型为定义的主键类** ```java public interface PersonRepository extends JpaRepository<Person, PersonPk>, JpaSpecificationExecutor<Person> { } ``` >[info]也可以不用另起一个类作为主键类,实体类自身也可以作为主键类。只需要将上面所有的 PersonPk 替换成 Person 即可。 <br/> # 2. `@Embeddable`与`@EmbeddedId`组合 **1. 创建一个主键类并标记注解`@Embeddable`** ```java @Data @Embeddable public class PersonPk implements Serializable { @Column(name = "id") private String id; @Column(name = "username") private String username; } ``` **2. 实体类中引入主键类并标记注解`@EmbeddedId`** ```java @Data @Entity @Table(name = "tb_person") public class Person { @EmbeddedId private PersonPk personPk; @Column(name = "age") private Integer age; } ``` :-: ![](https://img.kancloud.cn/60/41/6041283dd6b2ff8baf6216d0fbf98491_1617x155.png) 定义的联合主键 **3. 接口主键类型为定义的主键类** ```java public interface PersonRepository extends JpaRepository<Person, PersonPk>, JpaSpecificationExecutor<Person> { } ```