JPA (4) 썸네일형 리스트형 JPA 비관적 락 (Pessimistic Lock) 락의 필요성금융이나 결제쪽 개발을 할때 동시성 제어가 필요한 경우가 있다.물론 synchronized 처리를 떠올리지만, 쓰레드 레벨로 막는 것이고 실제로는 여러대의 서버를 두기때문에 부족하다.이 경우 DB(RDBMS, Redis 등) 레벨의 락이 필요한데, 이럴때 사용할 수 있는 JPA 락 방법이 있다. 락의 종류흔히 2가지로 나뉜다.낙관적 락 (Optimistic Lock) : 이름은 락이지만, 락을 걸진않고 수정 시 업데이트 되었는가를 감지비관적 락 (Pessimistic Lock) : 다른 트랜잭션의 데이터 (조회, 수정) 혹은 수정만 막는다.낙관적 락은 JPA에서 @Version 이라는 어노테이션을 통해 사용하고수정 시 버전이 다른 경우, ObjectOptimisticLockingFailureE.. Spring JPA @Id 복합키 설정 Spring JPA를 사용하면서 기본키가 2개 이상 컬럼으로 구성된 테이블을 Entity로 지정할 때가 있다. 예시로 아래와 같은 Work 테이블과 WorkE 엔티티 클래스가 있다고 가정했을때 @Table(name = "Work") public class WorkE { @Id @Column(name = "name") private String name; @Id @Column(name = "type") private String type; .... } 이름(name)과 구분(type) 두개의 컬럼을 기본키로 사용하고 있는 경우, 위처럼 두 필드에 모두 @Id 어노테이션을 사용하면 된다고 생각할 수 있다. 하지만 추가해야할 것이 있는데, 아래처럼 엔티티에 @IdClass 어노테이션을 추가해줘야한다. @IdC.. Spring JPA Querydsl 설정과 간단한 사용 JPA를 처음 사용하면서 아직 많이 써보진 않았지만 JPA의 장점과 한계에 느끼고있다. 개인적으로 느끼는 JPA의 가장 큰 장점은 영속성이다. 예시로, Mybatis를 사용할때는 insert 후 바로 컬럼을 업데이트 해줘야 하는일이 있으면 다시 update로직을 불러서 해결했지만 JPA는 쉽게 save(insert, update)후 리턴받은 객체에 다시 set필드만 해줘도 영속성 때문에 적용이 된다는 것이다. 정말 좋은 장점이지만 반대로 단점도 조금 큰 것 같다. spring-data-jpa에서 제공하는 메서드와 JPQL같은 정적쿼리에는 동적인 쿼리를 만들기에 한계가 있다. 이를 극복하기 위한 방안으로 Querydsl이라는 프레임워크가 있다. Querydsl SQL, JPQL을 자바 소스코드로 만들어주는.. Spring MVC JPA 적용하기 (spirng-data-jpa) 이전 글중 eclipse 스프링 레거시 프로젝트 생성과 이어지는 내용이다. https://riverblue.tistory.com/35 eclipse 스프링 레거시 프로젝트 생성 및 나의 기본 세팅 스프링 레거시로 만들고 싶은게 생겨서 새로 프로젝트를 만든다. ide는 eclipse 2020-09 버전 당연히 market으로 스프링이 설치되어있고 perspective는 spring으로 선택되어있어야 한다. 프로젝트 생성 File > riverblue.tistory.com 초기 프로젝트 구성으로 나에게 익숙한 Mybatis를 쓰려고 했지만 JPA를 써보기로 했다. 이유는 궁금해서 나는 기존에 ORM에 대해서 잘못알고 있었다. jdbc나 mybatis, jpa처럼 애플리케이션에서 디비에 접근할수 있게 하는 라.. 이전 1 다음