【发布时间】:2015-08-28 12:19:14
【问题描述】:
我有一个问题,正如我上面提到的,我知道根据 JPA 规范和 Hibernate 文档,默认构造函数是必须并且应该具有包级别的访问权限。我想知道,如果没有公共构造函数,它的代码仍然可以工作。为什么?
我也进入了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 确实引入了一个默认构造函数,如果没有定义,那为什么要把它放在规范中呢?
希望这次我的问题是正确的。
再次感谢... :)
【问题讨论】:
-
为什么不从发布您的课程开始呢?如果您没有构造函数,那么编译器会免费为您提供一个。其他 JPA 实现可以使用字节码增强添加默认 ctr,因此您也不需要在那里定义一个。
-
我知道这一点,请阅读我的问题,您只回答了我已经知道的一件事。我想知道的是在 JPA 规范中强制执行它的目的是什么?为什么规范必须定义这个。
-
对于不受欢迎的选民,请这个网站不仅适用于那些拥有成千上万名声的人,我对此很好奇我尝试了“谷歌搜索”但找不到任何令人满意的答案,那就是为什么在这里发帖。如果你不能回答并不意味着问题很糟糕或幼稚
-
除非你发布类(或者更好的是你编译的类的反编译形式,我们看不到它实际上有什么,在编译/增强过程中是否添加了默认构造函数)人无法进一步评论(我们不知道您已经知道什么)。对任何对您的问题投反对票的人咆哮无济于事,最好还是专注于在其他人要求的地方提供更多信息。为什么它在 JPA 规范中?问写它的人,但我希望它是实例化一个对象,这是一种可靠的方式,不会施加太多
-
对于大多数读者来说,如果您评论并参考您所指的 JPA 规范部分,将会很有帮助。至少给出您要求我们评论的规范版本的确切 URL。
标签: java hibernate jpa specifications