Setter 메소드에 Validation 로직 추가.

  • 하이버네이트가 DB에서 데이터를 가져올 때 이 Setter 메소드를 사용하여 속성을 설정하는데, 그럴 경우에는 validation을 하지 않고 변수에 직접 접근하도록 설정할 수 있다. 어떻게? p122 첫 줄.

Getter 메소드에서 복사체 전달.

  • 하이버네이트는 Dirty Checking을 하기 때문에, Persistent 상태의 객체 속성의 변경을 DB에 반영하기 위해 UPDATE문을 자동으로 실행한다.
  • Getter에서 같은 값의 다른 객체를 반환하더라도 불필요한 Update문을 실행하지 않는다.
다른 객체 반환하는 Getter
public String getFirstname() {
return new String(firstname);
}
  • Hibernate compares the objects by value—not by object
    identity—to determine whether the property's persistent state needs to
    be updated.
  • 하지만 Collection일 경우에는 예외이며, 이 경우 같은 객체들을 가진 다른 Collection 객체를 반환하면, 불필요한 UPDATE 문을 실행한다.
다음과 같이 하지 말 것
public void setNames(List namesList) {
names = (String[]) namesList.toArray();
}
public List getNames() {
return Arrays.asList(names);
}

예외 던지기

  • Runtime Exception이 발생하면, 트랜잭션을 롤백하고 Checked Exception이 발생하면, 하이버네이트가 잡아서 Runtime Exception으로 랩핑한다.

참조 : Java Persistence With Hibernate