문서의 이전 판입니다!
하이버네이트에 관해 항상 기억해둬야 할 사항들을 정리해 둔다.
hashCode와 equals를 항상 구현해야 한다.
이때 DB 프라이머리키(ID)가 아닌 항상 변치 않고 해당 객체를 대표하는 의미를 가질 수 있는 비즈니스 키(business key)를 hashCode와 equals의 대상으로 삼아야 한다.
이유는 Set등에 신규 객체를 넣을 경우 신규 객체는 아직 프라이머리키가 지정되지 않은 상태이기 때문에 ID가 모두 null
혹은 0
이며 이 경우 Set에 저장할 때 equals가 항상 true 여서 이전의 값을 뒤에 저장한 값이 계속 덮어써버리는 현상이 발생하기 때문이다.
따라서 ID를 equals/hashCode의 기준으로 삼을 경우 매우 주의해야 한다. 관련 참조 - Hibernate equals and hashCode
One-To-One과 Many-To-One 관계에서 One 측은 not null
이라고 명시하지 않는이상 Lazy Loading이 작동하지 않는다.
이에 관해서는 JPA One-To-One을 참조한다.
hibernate.show_sql=true hibernate.format_sql=true
위 프라퍼티 옵션으로 쿼리 로그를 남길 수 있다. 그러나 hibernate.show_sql=false
로 두고 되도록 Log4j 옵션을 사용하는 것이 좋다.
Hibernate Log 남기기를 참조한다.