2012-10-22 405 views
0

我有一個使用Hibernate連接到SQL數據庫的應用程序。當從應用程序的特定部分刪除某個人時,我想要重置在特定部分中設置的所有信息。下面是我在大約Java:更新信息的最佳實踐

Stage: Bank 

Fields to be set in stage: 
BankName 
AccNo 
IBANNo 
... 

當從這一階段的人,什麼是將所有的信息的最佳方式是什麼一個例子

public void resetInfo(Person person){ 
    person.setBankName(null); 
    person.setAccNo(null); 
    person.setIBANNo(null;) 
} 

public void resetInfo(Person person){ 
    if(person.getBankName != null) { 
     person.setBankName(null); 
    } 
    if(person.getAccNo != null) { 
     person.setAccNo(null); 
    } 
    if(person.getIBANNo != null) { 
     person.setIBANNo(null;) 
    } 
} 

還是有更好的方法來做到這一點?

+0

對不起,應該提到,我使用Hibernate 4 –

+0

第一個更好,更可讀和更有效率。因爲,如果條件意味着CPU的額外成本:) – chrome

回答

2
public void resetInfo(Person person) {  
    person.setBankName(null);  
    person.setAccNo(null);  
    person.setIBANNo(null;) 
} 

這很好,因爲Hiberante在內部保持跟蹤哪些所有字段值被更改以指定更新查詢。

此外,您可以通過設置show_sql = true來檢查,以檢查由Hibernate生成的更新查詢。

3

您以前的代碼片段看起來更好,更具可讀性。

1

您使用的是JPA/Hibernate /其他ORM嗎? 如果是這樣 - 只需將您的字段設置爲null,並讓框架創建它所需的查詢(也就是說 - 如果在沒有任何操作之前字段爲空)。

如果您使用JDBC - 收集所有更改並運行單個更新。

至於對象本身,在將它設置爲null之前檢​​查該值並不重要。您可以使用第一個示例(在所有字段中調用setNull())。

+0

我正在使用Hibernate ...這是否意味着我不需要檢查它們是否已經爲空,因爲如果它們是沒有運行的話,它們將不會運行?準確地說是 –

+0

。如果你試圖堅持的對象與休眠從DB獲得的對象相同 - 它不會更新。因此,如果所有字段都爲空,並且您將它們再次設置爲空,則您沒有更改該對象,也不會發生任何事情。 –

1

在Person類中有三個銀行字段的氣味不好。如何將這些字段移動到特定的Bank類?然後你可以做setBank(null),清除銀行信息。

如果您仍希望您的銀行信息與人員信息位於同一行,則可以在JPA中使用@Embedded。

+0

在我的實際代碼中,我有一個實際的Bank對象,它包含所有這些信息,只是以這種方式作爲示例(在我的代碼中它是person.getBank.setWhatever)...但我也使用tapestry,如果我使用setBank(null)我得到一個NullPointerException –