在使用Spring Data JPA构建具有既是主键又是外键的实体时,需要使用@EmbeddedId注解和@MapsId注解。 首先,需要创建一个嵌入式主键类,该类包含实体的主键和外键属性。例如: ``` @Embeddable public class MyEmbeddedId implements Serializable { @Column(name = "id") private Long id; @Column(name = "foreign_id") private Long foreignId; // getters and setters } ``` 然后,在实体类中使用@EmbeddedId注解将嵌入式主键类作为实体的主键。例如: ``` @Entity public class MyEntity { @EmbeddedId private MyEmbeddedId id; // other entity properties @MapsId("id") @ManyToOne @JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false) private MyForeignEntity foreignEntity; // getters and setters } ``` 在这个例子中,@MapsId注解将外键属性映射到嵌入式主键类中的id属性。@ManyToOne注解表示这是一个多对一的关系,@JoinColumn注解指定了外键列的名称和参考列的名称。 最后,需要在MyEntityRepository中定义一个方法来查询具有特定外键值的实体。例如: ``` public interface MyEntityRepository extends JpaRepository<MyEntity, MyEmbeddedId> { List<MyEntity> findByForeignId(Long foreignId); } ``` 这个方法将返回具有特定外键值的所有实体。