💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
联合主键策略有如下几种方式。 [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> { } ```