2010-02-25 86 views

回答

12

他們都將映射到相同的列類型。從記憶的角度來看,一個原語可能會稍微輕一些,但差異幾乎肯定會變得微不足道。我認爲原始語言會使其不可空,但您也可以使用註釋來完成此操作。

+0

謝謝,我會堅持java數據類型,以避免特殊處理空值 – Sam 2010-02-25 05:27:17

9

Kaleb的權利 - 如果任何查詢返回null值爲「啓用」(在這種情況下),那麼你必須使用對象,而不是原語。

這是從休眠FAQ:

甲的PropertyAccessException常發生時被傳遞到設置器方法的對象是錯誤的類型。檢查您的類型映射是否違規。 (要準確查看哪個屬性是問題,可能需要禁用CGLIB反射優化程序。)但是,此問題最常見的原因是Hibernate嘗試將null分配給基本類型的屬性。

如果您的對象具有映射到可爲null的數據庫列的原始類型屬性,那麼您將需要使用Hibernate自定義類型爲空列值的情況分配合理的默認(原始)值。更好的解決方案通常是使用Java屬性的包裝類型。

https://www.hibernate.org/116.html

20

我通常會建議使用的基本類型,只是爲了擺脫null檢查所有的地方。但這取決於你想說什麼。您現在的布爾可容納3個值:

  1. 真正

並與實體打交道時,空可以使總的新的語義。我通常用它作爲「無數據」。你的「啓用」可能是這種領域的一個壞例子。但是讓我們說你有一個持有一個人的年齡的數字。

private Integer age; 

當您使用null時,您可以將其視爲:「未知」。你也可以使用int來爲這種情況定義一個特殊的值(-1),但null是更自然的解決方案。

所以,總結一下。如果始終有一個有意義的值(必填字段?)和可選值的包裝類,則使用基元。

相關問題