2012-10-22 2 views
0

최대 절전 모드를 사용하여 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으로 설정하여 확인할 수 있으며 최대 절전 모드에서 생성 된 업데이트 쿼리를 확인할 수 있습니다.

3

이전 코드 조각이 더보기 좋고 읽기 쉽습니다.

1

JPA/Hibernate/Other ORM을 사용하고 있습니까? 그렇다면 필드를 null로 설정하고 프레임 워크가 필요한 쿼리를 생성하도록합니다. 즉, 아무것도 실행되지 않기 전에 필드가 null 인 경우를 의미합니다.

JDBC를 사용하는 경우 - 모든 변경 사항을 수집하고 단일 업데이트를 실행하십시오.

개체 자체는 null로 설정하기 전에 값을 검사해도 상관 없습니다. 첫 번째 예를 사용할 수 있습니다 (모든 입력란에 setNull()이라고 부름).

+0

최대 절전 모드를 사용하고 있습니다 ... 그렇다면 이미 실행중인 경우 아무 것도 실행되지 않으므로 이미 null인지 확인하지 않아도됩니까? –

+0

. 유지하려고하는 객체가 DB에서 최대 절전 모드로 전환 된 객체와 같으면 업데이트되지 않습니다. 따라서 모든 필드가 null이고 다시 null로 설정하면 개체가 변경되지 않고 아무 것도 일어나지 않습니다. –

1

Person 클래스에 세 개의 은행 필드가 있으면 냄새가 좋지 않습니다. 이 필드를 특정 은행 클래스로 옮기는 것은 어떻습니까? 그런 다음 은행 정보를 지우기 위해 setBank (null)을 수행 할 수 있습니다.

은행 계좌 정보가 개인 정보와 동일한 행에 표시되도록하려면 JPA에서 @Embedded을 사용할 수 있습니다.

+0

내 실제 코드에서이 모든 정보를 가지고있는 실제 Bank 객체를 가지고 있습니다. (예를 들어, 내 코드에서는 person.getBank.setWhatever입니다 ...) 그러나 저는 또한 태피스트리를 사용하고 있습니다. setBank (null) NullPointerException을받습니다. –

관련 문제