2013-03-20 68 views
1

我正在使用Spring JDBC,並且我想創建一個方法來檢查它是否已被保存到數據庫中,也就是說會得到一個自動遞增的鍵。如何檢查對象是否已保存到數據庫

我有一個int類型的域名爲id。由於原始ints是自動分配0如果沒有其他值給出我可以創建一個方法,檢查是否id == 0,但我必須確保我的主鍵序列從1開始。

我也可以在存儲庫中創建一個方法檢查對象是否已保存,但我不想爲此進行查詢。

,我能想到的最後的選擇是對id的類型更改爲Integer,然後檢查,如果它是null但我不知道這是否是做的好方法。

有沒有辦法在領域層有一個方法來做到這一點?

+1

一般來說,使用ID(分配給數據庫的持久性)似乎是一種好方法。你有沒有像JPA或Spring(你的情況?)查看ORM?這是這些框架的一個非常基本的功能,你可能正在旋轉你的車輪。另一個(簡單)選項在表上有一個存儲過程或自動增量,以便您知道空值或負值不會保存。注意溢出! – 2013-03-20 21:25:28

+0

也許我的問題有點不清楚,我現在更新 – LuckyLuke 2013-03-20 21:29:04

回答

3

int更改的id類型Integer被認爲是一個好主意:持久性框架如Hibernate和JPA鼓勵它(見從java.net這個例子中,這一個從adam-bien.com)。

使用對象類型,您可以通過檢查id == null是否可以快速地告訴未暫掛的對象。只是爲了完整性:

  • id == null:未保存的對象,執行INSERT
  • id != null:對象已經保存,執行UPDATE

這樣,您就不必把0(或任何其他整數值)作爲特殊情況含義未初始化;你已經有null,這很好地溝通了特殊情況的想法。

添加一個業務關鍵

一個更好的途徑,在this article建議,是使用一個業務重點在additon到數據庫管理ID。商業密鑰是一個實體標識符,它與自動生成的主要密鑰(代理密鑰)不同,它對用戶具有一些含義(自然密鑰)。

然後,您應該覆蓋equals方法,以使用業務關鍵字比較兩個對象,而不是自動生成的主鍵。

+0

爲什麼使用對象優於基元? – LuckyLuke 2013-03-20 21:39:38

+0

剛剛更新了答案。 – 2013-03-20 21:46:42

+0

'null'作爲一個特例很好地工作。 – 2013-03-20 22:12:22

相關問題