一尘不染

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

hibernate

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

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

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


阅读 409

收藏
2020-06-20

共1个答案

一尘不染

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

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

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

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

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

2020-06-20