我应该使用哪个注释:@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