我有一个问题,正如我上面提到的,我知道根据JPA规范和Hibernate doc,默认构造函数必须且应该具有包级访问权限。我想知道没有公共构造函数,代码仍然有效。为什么?
我也进入了Class.java的代码我找到了一行如下
// No cached value available; request value from VM
这是否意味着它从VM请求构造函数?即默认构造函数。这是否意味着我的代码(没有默认构造函数)依赖于VM?字节码增强怎么样?
我的重构问题:
我想知道为什么JPA添加了这个“MUST”要求来定义实体的默认构造函数。
根据规范:
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确实引入了一个默认的构造函数,如果没有定义,那么为什么要将它放在spec中?
我希望这次我正确地提出了我的问题。
再次感谢... :)
答案 0 :(得分:0)
在Java中,如果你根本没有定义构造函数,你将得到一个默认构造函数,它是public和zero-args,即它符合JPA规范的要求。
但是如果你确实定义了任何其他构造函数,则不会自动添加默认构造函数,因此该类不符合JPA要求。您必须显式添加零参数构造函数,旁边是您想要的任何其他构造函数。
至于为什么JPA规范需要它:它需要一个零参数构造函数,因为它不知道要传递给其他构造函数中的参数的值。
nb:你提到的关于Class.java
的内容完全不相关