implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
ddl-auto
create
: 기존 테이블 삭제 후 다시 생성(DROP + CREATE)create-drop
: create와 같으나 종료시점에 테이블을 DROPupdate
: 변경된 부분만 반영validate
: Entity와 테이블이 정상 매핑되었는지만 확인none
: 아무것도 안함show_sql
, format_sql
, use_sql_comments
옵션@PersistenceConext
: 자동으로 생성된 EntityManager를 주입받아 사용 가능@PersistenceContext
EntityManager em;
Spring 프레임워크에서는 DB의 트랜잭션 개념을 애플리케이션에 적용할 수 있도록 트랜잭션 관리자를 제공한다.
@Transactional(readOnly = true)
public class SimpleJpaRepository<T, ID> implements JpaRepositoryImplementation<T, ID> {
...
@Transactional
@Override
public <S extends T> S save(S entity) {
Assert.notNull(entity, "Entity must not be null");
if (entityInformation.isNew(entity)) {
em.persist(entity);
return entity;
} else {
return em.merge(entity);
}
}
...
}
@Transactional
: 클래스나 메서드에 추가하면 쉽게 트랜잭션 개념을 적용 가능readOnly = true
옵션인 @Transactional을 덮어쓰게 되어 readOnly = false
옵션으로 적용됨@Transactional
적용이 반드시 필요🔥readOnly = true
옵션이 설정된 @Transactional
을 적용하면 좋음진행중인 트랜잭션에서 다른 트랜잭션이 호출될 때 어떻게 처리할지 정하는 것
@Transactional
에서 트랜잭션 전파 옵션을 지정 가능REQUIRED
REQUIRED
: 부모 메서드에 트랜잭션이 존재하면 자식 메서드의 트랜잭션은 부모의 트랜잭션에 합류하게 됨