2016-12-07 19 views
-1

下面的代碼在下面的代碼中做了什麼?這段代碼是什麼,它是如何影響Hibernate實體的?

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

回答

2

這是一個簡單的無參數constructor,換句話說一個構造函數沒有輸入。

JPA specification states說:

實體類必須有一個無參數的構造函數。實體類也可以有其他構造函數。無參數構造函數必須是公共的或受保護的。

換句話說,JPA依賴於存在的無參數構造函數。它的工作方式是Hibernate使用其默認構造函數創建實體,然後通過setter方法設置值,甚至繞過setter,具體取決於您如何配置它。

由於構造Employee(Integer id, String name, Integer age)已添加到類,不包括默認的無參數的構造函數:

你不必爲你的類提供任何構造函數,但你一定要小心,當這樣做。編譯器自動爲任何沒有構造函數的類提供一個無參數的默認構造函數。

鑑於此,必須顯式添加無參數構造函數,如在您的Employee類中爲JPA(Hibernate實現的那樣)工作。

+0

所以這意味着它需要添加在代碼中? –

+0

@ElarCampañano是的,因爲你有一個帶參數的構造函數,所以默認的no-arg構造函數將被省略,如引用。因此,你需要實現無參數的構造函數。 – Magnilex