首页 > Java > java教程 > 如何使用 @EmbeddedId 与 @IdClass 在 JPA 和 Hibernate 中映射复合键?

如何使用 @EmbeddedId 与 @IdClass 在 JPA 和 Hibernate 中映射复合键?

Linda Hamilton
发布: 2024-12-05 03:24:17
原创
522 人浏览过

How to Map Composite Keys in JPA and Hibernate using @EmbeddedId vs. @IdClass?

使用 JPA 和 Hibernate 映射复合键

在提供的代码中,为 Time 表定义了一个复合键,其中 levelStation 和 confPathID 作为其组件。要在 JPA 和 Hibernate 中映射此组合键,您有两个选择:@EmbeddedId 和 @IdClass。

使用 @IdClass

@IdClass 注解允许您将实体的多个字段映射到形成复合主键。这需要定义一个表示主键的类。在这种情况下,TimePK 类可以定义如下:

这里,TimePK 是一个单独的类,必须定义无参数构造函数、主键字段的 getters/setters 和 equals( ) 和 hashCode() 方法。

使用 @EmbeddedId

@EmbeddedId 注解映射嵌入类到实体的主键。与@IdClass相反,这种方法结合了实体类和主键类。以下是使用 @EmbeddedId 的方法:

在这种情况下,TimePK 是 Time 实体的内部类,还必须定义一个无参数构造函数、关键字段的 getters/setters 和 equals () 和 hashCode() 方法。

@IdClass 和 @EmbeddedId 的区别

@IdClass 和 @EmbeddedId 之间的主要区别在于它们对查询语法的影响。使用 @IdClass,您可以直接通过实体访问主键字段,而使用 @EmbeddedId,您可以通过嵌入类上的 getter 访问它。

在两者之间进行选择时,@EmbeddedId 传达了这样的事实主键在域模型中具有有意义的标识,而 @IdClass 表明主键只是唯一标识该域的字段的组合

参考文献

  • JPA 1.0 规范:

    • 第 2.1.4 节“主键和实体标识”
    • 第 9.1.14 节“嵌入式 ID注解”
    • 第 9.1.15 节“IdClass 注解”

以上是如何使用 @EmbeddedId 与 @IdClass 在 JPA 和 Hibernate 中映射复合键?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板