我有一个问题,正如我上面提到的,我知道根据 JPA 规范和 Hibernate 文档,默认构造函数必须并且应该具有包级别访问权限。我想知道如果没有公共(public)构造函数,代码仍然有效。为什么?
我还进入了Class.java的代码,发现了如下一行
// No cached value available; request value from VM
这是否意味着它向 VM 请求构造函数?即默认构造函数。这是否意味着我的代码(没有默认构造函数)依赖于VM?字节码增强怎么样?
我重构的问题:
我想知道为什么 JPA 添加了这个“必须”要求来定义实体的默认构造函数。
根据规范:
The entity class must have a no-arg constructor. The entity class may have other constructors as well.
The no-arg constructor must be public or protected.
为什么会这样呢?我知道 Java 确实引入了一个默认构造函数,如果没有定义的话,那为什么要把它放在规范中呢?
我希望这次我的问题是正确的。
再次感谢...:)
最佳答案
在 Java 中,如果您根本没有定义构造函数,您将获得一个默认构造函数,它是公共(public)且零参数的,即它满足 JPA 规范的要求。
但是,如果您确实定义了任何其他构造函数,则不会自动添加默认构造函数,因此该类不满足 JPA 要求。您必须在您想要的任何其他构造函数旁边显式添加零参数构造函数。
至于为什么 JPA 规范需要它:它需要一个零参数构造函数,因为它不知道要传递给其他构造函数中的参数的值。
nb:您提到的有关 Class.java
的内容完全不相关
关于java - 根据 JPA 规范,实体类中必须有默认构造函数,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32270938/