含复杂字段的@Embeddable复合主键JPA/Hibernate表映射问题
JPA复合主键映射(@EmbeddedId 实现方案)
你目前用 @EmbeddedId 来实现 global_task_dependency 表的复合主键映射,这是JPA处理复合主键的标准方案之一。下面是格式化后的代码片段,以及核心注意点说明:
实体类:GlobalTaskDependency
@Data @Entity @AllArgsConstructor @NoArgsConstructor @Table(name = "global_task_dependency") public class GlobalTaskDependency implements Serializable { private static final long serialVersionUID = 1901782042815898352L; @EmbeddedId private GlobalTaskDependencyPK id; }
复合主键类:GlobalTaskDependencyPK
@Data @AllArgsConstructor @NoArgsConstructor @Embeddable public class GlobalTaskDependencyPK implements Serializable { private static final long serialVersionUID = // 补充你的序列化ID值; // 这里需要添加对应数据库复合主键的字段,示例: // @Column(name = "task_id") // private Long taskId; // @Column(name = "dependent_task_id") // private Long dependentTaskId; }
核心注意事项
- 复合主键类必须实现
Serializable接口,这是JPA的强制要求,确保主键能被序列化用于持久化和传输。 @Embeddable注解标记该类是可嵌入的主键类型,会被实体类引用作为完整主键。- 实体类通过
@EmbeddedId替代常规的@Id注解,关联复合主键实例。 - 主键类的字段要和数据库表的复合主键列一一对应,如果字段名和数据库列名不一致,记得用
@Column注解做映射。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

