在提供的代码中,为 Time 表定义了一个复合键,其中 levelStation 和 confPathID 作为其组件。要在 JPA 和 Hibernate 中映射此组合键,您有两个选择:@EmbeddedId 和 @IdClass。
@IdClass 注解允许您将实体的多个字段映射到形成复合主键。这需要定义一个表示主键的类。在这种情况下,TimePK 类可以定义如下:
这里,TimePK 是一个单独的类,必须定义无参数构造函数、主键字段的 getters/setters 和 equals( ) 和 hashCode() 方法。
@EmbeddedId 注解映射嵌入类到实体的主键。与@IdClass相反,这种方法结合了实体类和主键类。以下是使用 @EmbeddedId 的方法:
在这种情况下,TimePK 是 Time 实体的内部类,还必须定义一个无参数构造函数、关键字段的 getters/setters 和 equals () 和 hashCode() 方法。
@IdClass 和 @EmbeddedId 之间的主要区别在于它们对查询语法的影响。使用 @IdClass,您可以直接通过实体访问主键字段,而使用 @EmbeddedId,您可以通过嵌入类上的 getter 访问它。
在两者之间进行选择时,@EmbeddedId 传达了这样的事实主键在域模型中具有有意义的标识,而 @IdClass 表明主键只是唯一标识该域的字段的组合
JPA 1.0 规范:
以上是如何使用 @EmbeddedId 与 @IdClass 在 JPA 和 Hibernate 中映射复合键?的详细内容。更多信息请关注PHP中文网其他相关文章!