Hibernate

Web

[JPA] @ColumnDefault 이해하기

엔티티의 특정 필드에 @ColumnDefault 를 이용하여 Default 값을 'N' 으로 설정하였는데 null 값으로 저장되는 이슈가 발생하였다. 해결방법에 대해 정리해보자. @ColumnDefault 동작 @ColumnDefault는 Hibernate 에서 제공하는 Annotation 으로, Entity 의 필드에 대해 데이터베이스 기본 값을 정할 때 사용한다. 예를 들어 isDeleted 라는 필드가 있고 기본 값을 'N' 으로 설정하고 싶을 땐 아래와 같이 설정하면 된다. @ColumnDefault("'N'") // default N private String isDeleted; 그런데 이렇게 설정하고 테스트를 해보면 기대했던 N 값이 아닌 null 값임을 확인할 수 있다. - Test Code..

Web

[JPA] Dirty Checking 동작 방식 및 성능 개선

JPA 를 다시 공부하다가 변경감지를 내가 잘 이해하지 못했던 것 같아 정리해본다. Dirty Checking 동작 방식 JPA 의 영속성컨텍스트(Entitymanger)에는 1차 캐시와 쓰기 지연 SQL 저장소가 존재한다. 1차 캐시에는 id와 entity가 저장되고 쓰기 지연 저장소에는 쿼리가 쌓이는데 commit 하는 시점에 DB에 반영이 된다. 해서, 1차 캐시에 저장되어있는 엔티티를 수정하면 Dirty Checking(변경 감지) 으로 인해 쓰기 지연 저장소에 update 쿼리가 쌓이고 Transaction 이 끝나는 시점에 DB에 반영이 된다. 자바 코드로 commit이나 flush를 통해 커밋하는 게 아닌 테스트 시나리오 상에서 update 쿼리가 언제 호출되는지 보고싶어서 테스트 코드를 작..

limnj
'Hibernate' 태그의 글 목록