对于JPA / Hibernate复合主键,@ IdClass或@EmbeddedId实现,哪个更好?为什么?
这是一个天真的问题。我决定使用@EmbeddedId(无论出于何种原因),我觉得我做错了选择。取消引用包含列属性的EmbeddedId是多余的,并且在编码时很容易出错。
还有其他理由支持和/或反对吗?是JPA(规范)的建议吗?
正如Pascal所写,这是答案的一部分:
我应该使用哪个注释:@IdClass或@EmbeddedId
最后,我相信@IdClass在实践中使用起来要容易得多,因为您必须添加embeddedId属性名称才能取消引用PK属性,而并不是为所有非PK属性编写的。
@IdClass
embeddedId
您始终必须准确记住哪些属性是PK的一部分,哪些不是PK的一部分。这使不必要地编写JPQL查询变得复杂。
此外,AFAIK的JPA 2.0规范允许把@Id上@XToX/ @JoinColumn/ s的性质和它介绍了@MapsId注释,以便标识映射关系(在JPA又名衍生标识符)是更自然实现。
@Id
@XToX
@JoinColumn
@MapsId