====== JPA Lock ====== ===== Optimistic Lock 낙관적 잠금 ===== * [[http://www.baeldung.com/jpa-optimistic-locking|Optimistic Locking in JPA | Baeldung]] * 기본적으로 ''OptimisticLockException'' 을 던져야 하지만, EJB와 Spring은 이 예외를 감싼 다른 예외를 던진다. * EJB : ''EJBException'' * Spring : ''OptimisticLockingFailureException'' * 낙관적 잠금 대상 컬럼은 무조건 값이 증가 혹은 현재 시간으로 업데이트 된다. ===== Hibernate와 낙관적 잠금 ===== * HQL Update 문에서 버전 필드를 강제 업데이트 하고 싶으면 ''VERSIONED'' 를 사용한다(JPA 표준 아님, ''UserVersionType''과 함께 사용 불가). UPDATE VERSIONED Customer c set c.name = :newName where c.name = :oldName * [[https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/main/java/org/hibernate/usertype/UserVersionType.javaorg.hibernate.usertype.UserVersionType|UserVersionType]] 으로 사용자 정의 Version 타입 만들기 가능. ===== 참조 ===== * [[https://www.baeldung.com/jpa-pessimistic-locking|Pessimistic Locking in JPA | Baeldung]] * [[https://www.baeldung.com/java-jpa-transaction-locks|Enabling Transaction Locks in Spring Data JPA | Baeldung]] * [[https://reiphiel.tistory.com/entry/understanding-jpa-lock|JPA 잠금(Lock) 이해하기 :: 레이피엘의 블로그]]