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

JPA(Java持久性API)规范有2名不同的方式来指定实体组合键:@IdClass@EmbeddedId

我在映射的实体上同时使用了这两个注释,但是对于不太熟悉的人来说,这真是一个大麻烦JPA

我只想采用一种指定复合键的方法。哪个真的是最好的?为什么?

回答:

我认为这@EmbeddedId可能更冗长,因为@IdClass无法使用任何字段访问运算符来访问整个主键对象。使用,@EmbeddedId您可以这样做:

@Embeddable class EmployeeId { name, dataOfBirth }

@Entity class Employee {

@EmbeddedId EmployeeId employeeId;

...

}

这给构成组合键的字段提供了清晰的概念,因为它们都聚集在通过字段访问运算符访问的类中。

@IdClass和的另一个区别@EmbeddedId是编写HQL时:

@IdClass你一起写:

从员工e中选择e.name

@EmbeddedId你一起写:

从员工e中选择e.employeeId.name

您必须为同一查询写更多文本。有人可能会认为这与一种更自然的语言(如)提倡的语言不同IdClass。但是大多数时候,从查询中正确了解给定字段是组合键的一部分是非常有用的。

以上是 我应该使用哪个注释:@IdClass或@EmbeddedId 的全部内容, 来源链接: utcz.com/qa/424172.html

回到顶部