![](/img/trans.png)
[英]Converting from Integer wrapper class to int primitive class
[英]Using wrapper Integer class or int primitive in hibernate mapping
在我工作的公司中,我們有一個關於是否應該更好地使用基元的包裝類(java.lang.Integer,java.lang.Long)或是否直接在映射的POJO中使用基元類型的討論Hibernate中表的實體。
我們的想法是,我們希望這些值在數據庫中不為空。
支持使用原語的論據:
支持使用包裝器對象的參數:
使用包裝紙,讓您的生活變得簡單。
您的數據模型應該指明這一點。 無論如何,您應該在數據庫中強制執行可空性。
如果它們在數據庫中可以為空,那么使用包裝器。 如果它們不可為空,並且您使用包裝器,那么如果您嘗試將null插入數據庫,則會出現異常。
如果您的數據模型沒有規定它,那么請選擇約定,始終使用包裝器。 這樣人們就不必思考,或者確定值為0意味着為空。
我還會查詢你的斷言,它會降低性能。 你測量過這個嗎? 我的意思是真的測量過嗎? 當您與數據庫通信時,除了16位和32位之間的差異外,還有很多考慮因素。
只需使用簡單,一致的解決方案。 使用包裝隨處可見,除非有人給你一個很好的理由(准確的測量統計)不這樣做。
以為應該提到:
使用持久化類中的非原始屬性的Hibernate建議(第4.1.2節)實際上指的是 - 標題為 - 標識符屬性 :
4.1.2。 提供標識符屬性
Cat有一個名為id的屬性。 此屬性映射到數據庫表的主鍵列。 該屬性可能已被調用,其類型可能是任何基本類型,任何原始“包裝”類型,java.lang.String或java.util.Date。
...
我們建議您在持久化類上聲明一致命名的標識符屬性,並使用可空(即非原始)類型。
盡管如此,原語的優勢並不強烈:
Hibernate文檔 (我碰巧找到的第一個版本)聲明:
該屬性可能已被調用,其類型可能是任何基本類型,任何原始“包裝”類型,java.lang.String或java.util.Date。
...
我們建議您在持久化類上聲明一致命名的標識符屬性,並使用可空(即非原始)類型。
所以“專家的聲音”建議使用Integer
/ Long
......但是沒有描述為什么會出現這種情況。
我想知道是否可以創建一個尚未持久化的對象而沒有標識符(即屬性值為null
),將其與持久化實體區分開來。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.