实体 class 必须有无参数的构造函数

Entity class must have non argumented constructor

我正在学习 JPA,所以在学习 JPA BLOG Vogella 1.2 Entity Heading 时,我遇到了一行:

All entity classes must define a primary key, must have a non-arg constructor and or not allowed to be final

我无法理解这一行。我们是否需要专门编写一个非参数构造函数,因为默认的非参数构造函数总是由 classes.

继承

不允许是最终的是什么意思,这是否意味着我们总是可以扩展实体 class?如果是这样为什么这个强制,为什么它不能是最终的

默认情况下,当您的 class 中没有定义与 JPA 无关的构造函数时,您将获得非参数构造函数。是的,如果您正在定义一个构造函数,那么您必须定义无参数构造函数,例如:

 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
 }

使 class 最终意味着你不能 subclass。像 Hibernate 这样的 JPA 供应商创建代理来延迟获取行,这最终会限制您的性能调整选项。因此,根据您的用例,您会看到 class may/may 不是最终的。