当前位置: 首页 > 面试题库 >

JPA / Hibernate:对于复合主键,@ IdClass或@EmbeddedId实现,有什么更好的选择?为什么?

刘焱
2023-03-14
问题内容

对于JPA / Hibernate复合主键,@ IdClass或@EmbeddedId实现,哪个更好?为什么?

这是一个天真的问题。我决定使用@EmbeddedId(无论出于何种原因),我觉得我做错了选择。取消引用包含列属性的EmbeddedId是多余的,并且在编码时很容易出错。

还有其他理由支持和/或反对吗?是JPA(规范)的建议吗?


问题答案:

正如Pascal所写,这是答案的一部分:

我应该使用哪个注释:@IdClass或@EmbeddedId

最后,我相信@IdClass在实践中使用起来要容易得多,因为您必须添加embeddedId属性名称才能取消引用PK属性,而并不是为所有非PK属性编写的。

您始终必须准确记住哪些属性是PK的一部分,哪些不是PK的一部分。这使不必要地编写JPQL查询变得复杂。

此外,AFAIK的JPA 2.0规范允许把@Id@XToX/ @JoinColumn/
s的性质和它介绍了@MapsId注释,以便标识映射关系(在JPA又名衍生标识符)是更自然实现。



 类似资料:
  • 问题内容: 相关(SQL Server): Count(*)vs Count(1) 您能告诉我什么是性能更好的(MySQL)吗?Count(*)还是count(1)? 问题答案: 这是MySQL的答案。 它们的性能完全相同-除非您使用MyISAM,否则存在特例。无论如何我总是用。 http://dev.mysql.com/doc/refman/5.1/en/group-by- functions.

  • 我为这个特殊的问题找了很多,但我没有找到任何具体的解决办法。我在一个表中有一个复合主键,这个复合主键的一个字段是另一个表的复合主键的一部分。您可以说这个特定的字段是第二个表中的外键,但是在表定义中没有定义任何独占外键约束。对于第一个表中的每个rec,第二个表中可能有多条记录。我试图使用SPringBoot-JPA-Hibernate实现这一点,但无法实现。有人能帮我吗。以下是德泰:- 我有一个US

  • 我有一个复合主键,其中一个键为空。实体中必须存在哪些注释,以便我可以使用此类JPA获取数据: 我尝试使用IdClass Annotation和EmbeddedId Annotation,但出现异常: 例如,使用了数据,但在实际项目中使用了类似的数据,因此无法用值替换null。

  • 本文向大家介绍Spring Data Jpa 复合主键的实现,包括了Spring Data Jpa 复合主键的实现的使用技巧和注意事项,需要的朋友参考一下 前言 这次大创有个需求,在数据库建表时发现,user表与project表的关系表 user_project的主键为复合主键: 在网上看了几篇博客,以及在spring boot干货群咨询(感谢夜升额耐心解答)过后总算是做出来了。这里做个总结,方便

  • 问题内容: 我需要在循环中对数据库进行SQL查询: 更好的方法是:保持原样或循环后移动: 或者是其他东西 ? 问题答案: 整个要点是直到函数返回才执行,因此将其放置在要关闭的资源打开后的适当位置。但是,由于要在循环内创建资源,因此根本不要使用defer- 否则,在函数退出之前,您不会关闭在循环内创建的任何资源,因此它们会堆积直到然后。相反,您应该在每次循环迭代结束时关闭它们, 而无需 :