본문 바로가기

JPA38

@DataJpaTest 정리 source 는 Github 에 있습니다. @DataJpaTest 란? Jpa Test 에 포커싱이 맞춰진 테스트 annotation 입니다. 주로 Jpa test 를 할 때, 사용하며 Junit4 를 사용하면 @RunWith(SpringRunner.class) 와 같이 사용해야 합니다. 같이 사용해야하는 이유는 Spring 공식 문서에 같이 써야한다고 나와있습니다. DataJpaTest 는 인메모리 데이터베이스 (기본 H2) 로 설정하며, @Entity 가 붙은 클래스, Spring Data Jpa Repository 를 스캔합니다. Transactional 하며, 테스트가 종료 시 Rollback 기능도 있습니다. @RunWith(SpringRunner.class) 테스트 클래스에 RunWith 를 .. 2021. 12. 15.
jpa merge vs persist 동작방식 및 목적 정리 jpa merge vs persist 동작방식 및 목적 정리 merge, persist 동작방식 및 목적을 정리했습니다. merge merge 는 오직 분리된(detached) 엔티티에만 필요합니다. 예를 들면 다음과 같습니다. 아래와 같이 test 라는 entity 를 persist 를 통해 영속성 상태로 만들었습니다. 그런 뒤 entityManager 를 close 해서 test 가 준영속 상태가 됐다고 가정하겠습니다. 이런 경우 준영속 상태인 것의 상태를 변경해서 database 에 반영하고 싶습니다. 이럴 때 merge 를 사용해야 합니다. Test test = new Test(); test.setName("abc"); entityManager.persist(test); entityManager... 2021. 6. 25.
spring data jpa ID 생성전략에 따른 동작 방식 정리 source 는 Github 에 있습니다. spring data jpa ID 생성전략에 따른 동작 방식 정리 Entity ID 생성전략에 따른 동작 방식을 정리했습니다. ID 생성 전략이 없을 때, 즉 애플리케이션에서 채번할 때 아래 테스트를 수행할 경우 애플리케이션에서 ID 를 생성해줬기에 DB 에 값이 있나 확인하기 위해 select 를 날려본 후에, INSERT 가 이루어집니다. 즉, merge 방식으로 동작합니다. Hibernate: select nogenerati0_.id as id1_5_0_, nogenerati0_.name as name2_5_0_ from no_generative_strategy nogenerati0_ where nogenerati0_.id=? @Test public voi.. 2021. 6. 22.
spring-data-jpa save 동작 원리 source 는 Github 에 있습니다. spring-data-jpa save 동작 원리 spring-data-jpa save source 를 보면 아래와 같습니다. entity 가 새로 생성할 예정이라면 persist() 를 호출하고, 그렇지 않다면 merge() 를 호출합니다. SimpleJpaRepository.java /* * (non-Javadoc) * @see org.springframework.data.repository.CrudRepository#save(java.lang.Object) */ @Transactional @Override public S save(S entity) { if (entityInformation.isNew(entity)) { em.persist(entity); r.. 2021. 4. 28.