java - 根据 JPA 规范,实体类中必须有默认构造函数,为什么?

标签 java hibernate jpa specifications

我有一个问题,正如我上面提到的,我知道根据 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/

相关文章:

java - gradle 4.10 + java11 = spring(和许多其他库)的依赖版本检测问题

java - 允许从键盘输入特定语言的字符

linq - ORM(Linq、Hibernate...)真的那么有用吗?

hibernate - 使用 JPA 或 native 查询计算时间

java - JPA 不生成 "on delete set null"FK 限制

java - 未检查的异常如何报告给用户

java - Java中的内存分配和管理

java - 我的 Hibernate 测试程序在执行期间卡住

java - 是否可以使用 MockMvc 进行 JPA 测试?

java - 发布 : 500 Internal Server Error only in Chrome