Java 为什么我们需要在实体中声明非空构造函数?

Java 为什么我们需要在实体中声明非空构造函数?,java,spring,hibernate,jpa,constructor,Java,Spring,Hibernate,Jpa,Constructor,我知道一个没有参数的构造函数必须在实体中。但最近,我也看到了带参数的构造函数。我不明白为什么需要它以及它是如何工作的。对于hibernate实体,您应该至少提供一个没有参数的默认构造函数。若您的实体有许多字段,并且只有两个字段,那个么您可以创建带有强制参数的构造函数,但默认构造函数(不带参数)应该在实体中 当您创建实体时,它是一个普通类,您不仅可以将其用于hibernate映射,还可以用于其他组件 您还可以添加静态工厂方法来轻松创建类 例如: @Entity class User{ //mand

我知道一个没有参数的构造函数必须在实体中。但最近,我也看到了带参数的构造函数。我不明白为什么需要它以及它是如何工作的。

对于hibernate实体,您应该至少提供一个没有参数的默认构造函数。若您的实体有许多字段,并且只有两个字段,那个么您可以创建带有强制参数的构造函数,但默认构造函数(不带参数)应该在实体中

当您创建实体时,它是一个普通类,您不仅可以将其用于hibernate映射,还可以用于其他组件

您还可以添加静态工厂方法来轻松创建类

例如:

@Entity
class User{
//mandatory fields
private Long id;
private String userName;

//not mandatory fields:
private Date registrationDate;
private String nickName;

   public User(){//it's default constructor for hibernate entity creation 
   }

   public User( Long id ,String userName){ // you can create entity whenever when you want to create entity
....
   }
}
用户(长id,字符串用户名)-如果需要用户实例,则声明 您应该使用必填字段创建它


如果您有User()构造函数,则很难理解在创建实体实例时必须在内部使用哪些参数hibernate使用newInstance()创建实体实例方法此方法仅适用于默认构造函数。如果您提供任何参数化构造函数,我们也必须提供默认构造函数。

我不确定是否理解您的问题。那么,什么让你困惑?你能举个例子吗?如果我们讨论的是两个构造函数存在的情况——是的,这是可能的。至少有一个空构造函数是框架通过反射实例化实体所必需的。只要您有一个空构造函数,其他可用的构造函数就无关紧要了。实体可以有尽可能多的构造函数,只要有一个空值。您在哪里看到的?为什么需要在另一个类中包含参数的构造函数,对于实体也是如此。主文件是类数据的主要表示形式,可以使用构造函数构建,辅助文件可以使用setter构建。顺便说一下,如果您不愿意,java会隐式提供空构造函数。@J-Alex是的,这就是我问题的答案!事实上,除了默认(无参数)构造函数之外,您不需要任何其他构造函数。如果你认为你这样做了,那么清楚地说明你为什么这样想,如果你没有例外,你会得到什么。拥有一些标识字段与JPA实体的要求完全无关