# @EntityListeners

5개의 포스트
post-thumbnail

[SpringBoot]-@EntityListeners

JPA Auditing이란? >Java에서 ORM 기술인 JPA를 사용하여 도메인을 관계형 데이터베이스 테이블에 매핑할 때 공통적으로 도메인들이 가지고 있는 필드나 컬럼들이 존재합니다. 대표적으로 생성일자, 수정일자, 식별자 같은 필드 및 컬럼이 있습니다. 도메인마다 공통으로 존재한다는 의미는 결국 코드가 중복된다는 말과 일맥상통합니다. 데이터베이스에서 누가, 언제하였는지 기록을 잘 남겨놓아야 합니다. 그렇기 때문에 생성일, 수정일 컬럼은 대단히 중요한 데이터 입니다. 그래서 JPA에서는 Audit이라는 기능을 제공하고 있습니다. Audit은 감시하다, 감사하다라는 뜻으로 Spring Data JPA에서 시간에 대해서 자동으로 값을 넣어주는 기능입니다. 도메인을 영속성 컨텍스트에 저장하거나 조회를 수행한 후에 update를 하는 경우 매번 시간 데이터를 입력하여 주어야 하는데, audit을 이용하면 자동으로 시간을 매핑하여 데이터베이스의 테이블에 넣어주게 됩니다. 스프링 부트에

2023년 6월 25일
·
0개의 댓글
·
post-thumbnail

[Clone Coding] @MappedSuperClass, @EntityListeners

개요 당근 마켓 클론 코딩을 진행하던 중, 코드 상 유의미하게 학습할 요소들이 있었기에 코드들을 하나 분석하며 모르는 부분들을 채워나갈 예정입니다. 이번 포스팅에서는 특정한 시각을 기록하기 위한 TimeStamp 클래스를 가져와봤는데, 이와 관련해서 작성된 @MapperSuperclass나 @EntityListeners 등을 알아보겠습니다. 코드 @MappedSuperclass의 역할 JPA에서 사용되는 애노테이션으로 상속 관계에서 부모 클래스에 해당 어노테이션을 지정함으로써 부모 클래스의 속성들을 하위 엔티티 클래스에서 사용할 수 있도록 하는 역할을 합니다. 예를 들어, TimeStamped는 LocalDateTime을 가지고 있는데, 각각의 클래스는 TimeStamped를 상속함으로써 별도의 LocalDateTime 속성을 정의할 필요가 없는 것이죠. +프로젝트 내에서 사용되는 예시 🤔 근데 일반 상속 관계랑 차이가 뭐야? 우

2023년 6월 24일
·
0개의 댓글
·
post-thumbnail

JPA Auditing 생성시간/수정시간 자동화

CH03 - JPA Auditing 생성시간/수정시간 자동화 생성시간과 수정시간은 유지보수에 중요한 정보 DB 삽입, 갱신 전에 날짜 데이터 등록, 수정 반복 코드를 제거하기 위해 JPA Auditing 사용 LocalDate 사용 Java8 일 경우 필수로 사용 🗯️ Date, Calendar 클래스의 문제점 불변 객체가 아니다 Calendar는 월 (Month) 값 설계 문제 BaseTimeEntity 클래스 > BaseTimeEntity.java > BaseTimeEntity 클래스는 모든 Entity 의 상위 클래스로 사용 Entity 들의 createdDate, modifiedDate 를 자동 관리 역할 @MappedSuperclass JPA Entity 클래스들이 BaseTimeEntity 을 상속할 경우 필드들도 칼럼으로 인식 `@Entit

2023년 3월 22일
·
0개의 댓글
·

JPA delete관련 에러

post(one) - reply(many)의 관계에서 post를 삭제하려고 하면 영속성 문전이 문제로 reply가 삭제되지 못하고 rollback이 발생하는 문제가 발생했다. 해결방법을 찾아본 결과 cascase(영속성 전이)옵션을 CascadeType.ALL, CascadeType.REMOVE로 설정해주면 된다. 위의 방법으로 하다보니 다른 문제가 있었는데 주인객체들은 삭제하지 않고 싶었다. 영속성 관리에 따르면 댓글쪽에서 먼저 포스트를 null처리 해주면 관계가 끊어지면서 해결자체는 되었다. 더 찾아본 결과 @EntityListeners중 라는 엔티티 생명주기에 따라 처리하는 과정이 존재함을 알게 되었고 @PreRemove를 사용하여 post가 삭제되기 전에 post에 연결된 replies에서 포스트와 관계를 끊어주는 처리를 하였다.

2023년 2월 12일
·
0개의 댓글
·

Spring Data JPA Auditing - Entity 생성/수정 시간 맵핑

Spring Data JPA Auditing 테이블을 설계할 때 여러 목적으로 생성 및 수정 시간을 저장하게 되는데, JPA를 이용해 Entity와 매핑하게 된다면 직접 필드를 선언해주고, 생성/수정 시마다 현재시간을 저장해주는 코드가 필요하게 되어, 여러 테이블에 대한 중복 코드가 발생할 수 있다. 이럴 때 Spring Data JPA Auditing을 이용해 시간이나 생성자에 대해 자동으로 값을 넣어주게 된다면 편하게 관리할 수 있게 된다. @EnableJpaAuditing Spring Data JPA Auditing 를 사용하기 위해 SpringBoot 설정 클래스에 @EnableJpaAuditing 어노테이션을 추가한다. @EntityListeners 엔티티의 라이프 사이클중 특정 커스텀 콜백을 요청할 수 있는 어노테이션이다. 커스텀 콜백을 요청할 클래스를 @EntityListeners 의 인자로 지정하면 된다. Auditing 을 수행

2022년 6월 10일
·
0개의 댓글
·