2017-06-17 77 views
0

我知道一個不帶參數的構造函數必須位於Entity中。但最近,我也看到了帶有參數的構造函數。我不明白,爲什麼可能需要它,以及它是如何工作的。爲什麼我們需要在實體中聲明NOT空構造函數?

+0

不知道我得到你的問題。那麼,你有什麼困惑?可能你可以舉個例子嗎?如果我們談論的是兩個建築師存在的情況 - 是的,這是可能的。它被稱爲超載。 –

+1

對於由框架通過反射實例化的實體,至少有一個無效構造函數是必需的。只要你有一個無用的構造函數,它可以使用的其他構造函數並不重要。只要存在一個空隙,實體就可以擁有儘可能多的構造函數。你在哪裏看到這個? –

+0

你需要在另一個類中使用參數的構造函數的原因與實體相同。作爲類數據主要表示的主要文件可以使用構造函數,輔助文件 - 使用setter來構建。順便說一句,如果你不這樣做,java會隱式地提供空構造函數。 –

回答

0

對於hibernate實體,您應該至少提供一個不帶參數的默認構造函數。如果你的實體有許多字段,並且只有它們是你可以創建帶有強制參數的構造函數/構造函數,但默認構造函數(不帶參數)應該是實體。

作爲你的實體它是一個普通的類,你不僅可以用於Hibernate映射,也可以用於其他組件。

您還可以添加靜態工廠方法來輕鬆創建類。

的exaple:

@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長,字符串username) - 你聲明,如果你需要的用戶實例 你應該強制字段創建它。

的情況下,當你有用戶()構造很難理解什麼參數是必須的

0

內部創建實體休眠的情況下使用newInstance()方法這個方法只適用於默認的構造函數只有.thats如果u提供任何參數化構造函數以及我們必須提供默認構造函數。

相關問題