我正在学习JPA,所以在JPA BLOG Vogella 1.2 Entity Heading学习期间,我遇到了一句话:
所有实体类必须定义主键,必须具有非arg 构造函数和/或不允许是最终的
我无法理解这一行。我们是否需要专门编写一个非争论的构造函数,因为默认的非争论构造函数总是由类继承。
它们是什么意思,不允许是最终的,这是否意味着我们总是可以扩展实体类?如果是这样,为什么这种强迫,为什么它不能是最终的
答案 0 :(得分:2)
默认情况下,如果类中没有定义与JPA无关的构造函数,则会得到非arg构造函数。是的,如果要定义构造函数,则必须定义没有arg构造函数,如:
public class Student {
public Student() {}//default ctor which is needed by JPA to convert row from DB to java object
public Student(int id) {..}//ctor which accepts one arg
}
使类最终意味着你不能继承。像Hibernate这样的JPA供应商创建代理以延迟获取行,这最终将限制您的性能调整选项。因此,根据您的使用案例,您会看到您的课程可能/可能不是最终的。