오늘은 영속성 컨텍스트의 스코프와 준영속 상태에 대해서 공부하다 생긴 의문점에 대한 것과 이를 해결해 나갔던 과정에 대해서 작성한다. 김영한님의 JPA강의를 듣고 자바 ORM 표준 JPA 프로그래밍을 다시 정독하던 중 한 코드에서 의문이 생겼다. public class ExamMergeMain { static EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); public static void main(String[] args) { Member member = createMember("memberA", "회원1"); member.setName("updateName"); mergeMember(member); } stat..
JPA의 Entity를 수정할 때 발생한 실수에 대해서 기록한다 문제상황 JPA를 사용하면 트랜잭션 범위 안에서 Entity의 데이터를 변경할 때, 데이터를 변경하는 작업 이외에 다른 메소드는 호출하지 않는다. 이는 Entity가 영속성 컨텍스트에서 제공하는 변경 감지 덕분이다. 하지만 JPA에 대한 이해가 부족하면 다음과 같은 실수가 발생할 수 있다. Person 클래스의 name, address는 nullable=false로 설정 되어있다. 그리고 Person의 name을 null로 변경 했을때 나는 예외가 발생하는 것을 기대했다. 하지만 결과는 다음과 같았다. Person의 이름은 null로 변경되었고, 예외는 발생하지 않았다. 문제분석 @Column에 대해서 Person 클래스의 name 필드에 ..