下面的代码在下面的代码中做了什么?
public Employee() {
}
它对Hibernate实体有什么影响吗?如果是这样,会有什么影响?
@Entity
@Table(name = "employee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
@Column(name="age")
private Integer age;
public Employee() {
}
public Employee(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
}
答案 0 :(得分:2)
这只是一个no-arg constructor,换句话说就是没有输入的构造函数。
实体类必须具有无参数构造函数。实体类也可以有其他构造函数。 no-arg构造函数必须是公共的或受保护的。
换句话说,JPA依赖于存在no-args构造函数。它的工作方式是Hibernate通过使用默认构造函数创建实体,然后通过setter方法设置值,甚至绕过setter,具体取决于您的配置方式。
由于构造函数Employee(Integer id, String name, Integer age)
已添加到类中,因此不包含默认的no-arg构造函数:
您不必为您的班级提供任何构造函数,但在执行此操作时必须小心。编译器会自动为没有构造函数的任何类提供无参数的默认构造函数。
鉴于此,必须显式添加no-arg构造函数,如在Employee
类中,为JPA(Hibernate实现)工作。