使用 JPA 和 Hibernate 映射复合键
将实体映射到数据库表时,通常使用主键来唯一标识记录。由多个列组成的复合键通常用于遗留数据库系统。 JPA 和 Hibernate 都提供了注释来有效地处理复合键。
使用 EmbeddedId
EmbeddedId 注释表示 Java 类代表复合主键。它将类映射到表的聚集主键。该类必须:
EmbeddedId 示例
@Entity public class Time { @EmbeddedId private TimePK timePK; private String src; private String dst; private Integer distance; private Integer price; } @Embeddable public class TimePK { private Integer levelStation; private Integer confPathID; // Constructor, equals(), and hashCode() methods omitted for brevity }
使用 IdClass
IdClass 注解指定多个字段或实体类的属性组成了复合主键。该类必须:
IdClass 示例
@Entity @IdClass(TimePK.class) public class Time { @Id private Integer levelStation; @Id private Integer confPathID; private String src; private String dst; private Integer distance; private Integer price; } public class TimePK implements Serializable { private Integer levelStation; private Integer confPathID; // Constructor, equals(), and hashCode() methods omitted for brevity }
在 EmbeddedId 和 IdClass 之间进行选择
EmbeddedId 为复合键创建一个单独的类,而IdClass 使用实体类本身来保存主键字段。 EmbeddedId 更明确,建议有意义的实体,而 IdClass 更适合不具有独立含义的字段组合。
参考文献
JPA 1.0 规范: https://jcp.org/en/jsr/detail?id=220
以上是如何使用'@EmbeddedId”和'@IdClass”在 JPA 和 Hibernate 中有效映射复合键?的详细内容。更多信息请关注PHP中文网其他相关文章!