JPA

· Spring/JPA
문제 JPA를 사용하면서 서로 다른 엔티티를 save할때 id값이 엔티티 별로 나누어지지 않고 합쳐서 올라가는 경험을 한 적이 있을 것이다. commentRepository.save(new Comment()); memberRepository.save(new Member()); 예를 들어 위의 코드를 실행하면 이렇게 엔티티별로 id가 분리되지 않고 함께 증가하는걸 알 수 있다. @GeneratedValue를 사용하면 default값으로 AUTO가 적용되고, AUTO는 IDENTITY를 기본으로 사용한다고 알고 있었는데, 실제로 적용되는 전략은 IDENTITY가 아니였던 것이다. 실제 어떤 전략이 적용되었는지 확인해보면, 사진에서 볼 수 있듯이 테이블 시퀸스가 적용된것을 알 수 있다. 테이블 시퀸스 전략이란..
· Database
트랜잭션이란? 트랜젝션은 데이터베이스의 상태를 변화시키기 위한 작업 수행의 논리적 단위를 의미한다. 우리는 데이터베이스로 SQL 쿼리를 보냄으로써 데이터베이스의 상태를 변화시킨다. 그렇다면 작업 단위라는 것은 무엇을 말하는 것일까? 작업 단위는 사용자가 특정 기능의 수행을 위해 SQL 작업을 묶은 단위를 의미한다. 송금 서비스를 예로 들어보자. 송금 서비스는 1. A가 돈을 보내고, 2. B가 그 돈을 안전하게 받았을때 완전히 실행이 됐다고 할 수 있다. 두 과정이 다른 트랜젝션, 즉 다른 작업으로 분리되었다고 생각해보자. A가 돈을 10000원 송금하면 A의 돈 데이터에서 10000원이 차감될 것이다. 그에 맞춰서 B의 잔고는 10000원이 추가 될 것이다. 만약 A의 로직에서 오류가 발생해 트랜젝션 ..
· Spring/JPA
JPA에서 영속성 컨텍스트는 가장 중요한 내부 동작 원리 중 하나입니다. 오늘은 영속성 컨텍스트의 역할과 구성에 대해서 정리해보겠습니다. 영속성 컨텍스트란 우선 영속성 컨텍스트는 눈에 보이지 않는 논리적인 개념입니다. 우리는 엔티티 매니저를 통해서 이 논리적인 공간에 접근 할 수 있습니다. # 먼저 엔티티 매니져를 생산할 수 있는 엔티티 팩토리를 만들어줍니다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); # persist를 통해서 entity를 영속성 컨텍스트에 저장할 수 있다. em.persist(entity); 위 코드의 pers..
Jemlog
'JPA' 태그의 글 목록