2012-10-22 112 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 –