본문 바로가기

Transactional3

[JPA] Repository 인터페이스 작성시 유의사항 JpaRepository를 상속 받은 인터페이스를 작성 할 때, 기본 제공 메소드만 쓰는 경우는 별로 없다고 생각한다. 필요로하는 커스텀 메소드가 필요하다. 이때 간과해서는 안될 아주 중요한 부분이 있다..!!! 기본적으로 JpaRepository 인터페이스에는 @Transactional 이 달려있다. 따라서 해당 메소드를 거친 엔티티는 계속 영속성 상태이다. 하지만, 우리가 임의로 정의해준 메소드에는 @Transactional이 적용되지않는다. 따라서 정의한 메소드에도 Transactional이 정의되도록 꼭 어노테이션을 붙여줘야한다. 그렇지 않았다가는 나중에 어마어마한 시한폭탄이 될것이다.. //select 만 하는 경우 readOnly 옵션을 줌으로써 조금이나마 성능향상을 꾀할 수 있음 @Trans.. 2020. 7. 21.
[JPA] 이메일 인증 토큰 값이 Null ?? (EntityLifeCycle, Transactional) 백기선님의 JPA 웹앱 만들기 강의를 참고하였습니다. 회원가입시 이메일로 본인 확인을 검증하는 과정에서 임시로 발급한 token값이 null이어서 에러 페이지를 뱉어냈다. java.lang.NullPointerException: null at com.jpa.studywebapp.account.AccountController.checkEmailToken(AccountController.java:65) ~[main/:na] 왜그럴까? 여기서 한 번 더 JPA 라이프사이클의 중요성 을 깨닫는다. 문제의 소스코드 public void processNewAccount(SignUpForm signUpForm) { Account newAccount = saveNewAccount(signUpForm); newAccou.. 2020. 7. 14.
[Spring] @Transactional - 1 전파 레벨(propagation) @Transactional 사용시 주의사항 @Transactional을 클래스 또는 메소드 레벨에 명시하면 해당 메소드 호출시 지정된 트랜잭션이 작동하게 된다. 단, 해당 클래스의 Bean을 다른 클래스의 Bean에서 호출할 때만 @Transactional을 인지하고 작동하게된다. Propagation.REQUIRED @Transactional(propagation = Propagation.REQUIRED) public void doSomething() { ... } default 값이기 때문에 생략가능 부모 트랜잭션 내에서 실행하며, 부모 트랜잭션이 없을 경우 새로운 트랜잭션 생성 해당 메소드를 호출한 곳에서 별도의 트랜잭션이 설정되어 있지 않다면 트랜잭션을 새로 시작한다.(새로운 연결을 생성하고 실행.. 2020. 7. 6.