这段代码是什么?它如何影响Hibernate实体?

时间:2016-12-07 07:29:27

标签: java hibernate jpa constructor entity

下面的代码在下面的代码中做了什么?

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;
   }
}

1 个答案:

答案 0 :(得分:2)

这只是一个no-arg constructor,换句话说就是没有输入的构造函数。

JPA specification states

  

实体类必须具有无参数构造函数。实体类也可以有其他构造函数。 no-arg构造函数必须是公共的或受保护的。

换句话说,JPA依赖于存在no-args构造函数。它的工作方式是Hibernate通过使用默认构造函数创建实体,然后通过setter方法设置值,甚至绕过setter,具体取决于您的配置方式。

由于构造函数Employee(Integer id, String name, Integer age)已添加到类中,因此不包含默认的no-arg构造函数:

  

您不必为您的班级提供任何构造函数,但在执行此操作时必须小心。编译器会自动为没有构造函数的任何类提供无参数的默认构造函数。

鉴于此,必须显式添加no-arg构造函数,如在Employee类中,为JPA(Hibernate实现)工作。