본문 바로가기

JPA3

[JPA] BaseTimeEntity @CreatedDate 오류 최근 JPA를 이용하여 진행하고 있는 토이 프로젝트가 있는데 Entity의 생성시간을 자동으로 캐치해서 DB에 기록해주는 @CreatedDate 어노테이션이 제대로 동작하지 않는 문제가 생겼다. 보통 JPA를 사용하면 아래와 같은 entity를 생성하고 생성 시점이나 수정 시점을 자동으로 기록하고 싶은 entity는 해당 entity를 상속하게 하여 간편하게 구현할 수 있다. 그런데 생성시점을 자동 기록해주는 @CreatedDate를 사용한 createdDt 필드가 계속해서 null로 들어가는 문제가 발생했다. @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public abstract class BaseTimeEntity.. 2021. 8. 29.
DB 스키마 자동 생성 JPA에서는 애플리케이션 로딩 시점에 DB 테이블을 자동으로 생성하는 기능을 지원해준다. 편리하긴 하지만 운영 환경에서 그대로 사용하지는 않거나 다듬어 사용하고, 로컬이나 개발 단계에서 사용하기 편리한 기능이다. 해당 기능을 사용하면 DDL을 자동 생성하며 데이터베이스 방언을 활용해서 각 DBMS에 맞는 적절한 DDL을 생성해 준다. 스프링 프로젝트의 경우 application.yml에서 해당 값을 설정할 수 있으며 jpa.hibernate.ddl-auto에 create 값을 넣어주면 자동으로 JPA가 테이블을 생성해준다. jpa: hibernate: ddl-auto: create 실제 위처럼 설정을 하고 애플리케이션을 실행하면 아래와 같이 DDL 쿼리가 날아가는 것을 볼 수 있다. ddl-auto 옵션.. 2021. 6. 10.
영속성 컨텍스트 JPA를 통해 entity를 만들고 DB와 연동하기 전, JPA의 동작 원리가 어떻게 되는지에 대해 알고갈 필요가 있다. JPA에 대한 개념 중 가장 중요한 두 가지를 들자면, 1. 객체와 관계형 DB 매핑 2. 영속성 컨텍스트 라고 할 수 있다. 이번 정리에서는 객체와 관계형 DB를 매핑하는 방법을 배우기 전에 영속성 컨텍스트의 개념에 대해서 정리한다. 영속성 컨텍스트 해당 포스트에는 나와있지 않지만 이 전 까지의 강의에서 JPA를 사용하기 전, EntityManagerFactory를 Singleton으로 생성하고 그것으로 부터 EntityManager를 생성하여 DB의 connection pool과 연동하여 JPA를 사용한다고 배웠다. 해당 설명을 그림으로 나타내면 아래와 같다. 영속성 컨텍스트는 이.. 2021. 6. 7.