T_era
Spring Data JPA Query Methods 및 JPA Auditing 정리 본문
Query Methods
메서드 이름 기반 SQL 자동 생성 기능. JpaRepository는 기본 기능만 제공하며, 실제 개발에는 조건부 메서드 필요.
코드 예시:
public interface MemberRepository extends JpaRepository<Member, Long> {
Member findByNameAndAddress(String name, String address);
}
위 메서드는 다음과 같은 SQL로 자동 생성됨.
SELECT * FROM member WHERE name = ? AND address = ?;
JpaRepository 제네릭 타입의 Entity와 매핑되는 테이블의 SQL 생성. 개발자는 규칙에 따라 메서드 선언, SimpleJpaRepository에서 구현됨.
해석 규칙:
- find...By...: 조회 수행.
- ByName: member 테이블의 name 필드 조건.
- AndAddress: member 테이블의 address 필드 AND 조건 추가.
- 직접적인 해석을 하는 것보다 공식문서 참고하는 것이 올바르다
JPA Auditing
Entity 생성 및 수정 시간 자동 관리 기능. Entity의 생성 및 수정 시점 추적 가능.
기존 방식:
@MappedSuperclass
public class BaseEntity {
@Column(updatable = false)
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
@PrePersist
public void prePersist() {
LocalDateTime now = LocalDateTime.now();
created_at = now;
updated_at = now;
}
@PreUpdate
public void preUpdate() {
updated_at = LocalDateTime.now();
}
}
Spring Data JPA Auditing
어노테이션 기반 Auditing 기능 제공.
사용하는 Annotation:
- @EnableJpaAuditing: JPA Auditing 활성화.
- @MappedSuperClass: 상속받는 Entity에 공통 매핑 정보 제공.
- @EntityListeners(AuditingEntityListener.class): Entity DB 적용 전 커스텀 콜백 요청. AuditingEntityListener는 Auditing 기능 활성화 Listener, 내부적으로 @PrePersist, @PreUpdate 사용.
- @CreateDate: 생성 시점 자동 기록.
- @LastModifiedDate: 수정 시점 자동 기록.
- @Temporal: 날짜 타입 명시 (DATE, TIME, TIMESTAMP). 최신 Hibernate에서 LocalDate, LocalDateTime 생략 가능.
- @CreatedBy: 생성자 정보 자동 저장. 생성 주체 지정을 위해 AuditorAware<T> 구현 필요 (Spring Security 연동).
- @LastModifiedBy: 최종 수정자 정보 자동 저장. 생성 주체와 동일하게 AuditorAware<T> 구현 필요 (Spring Security 연동).
적용 방법:
- @EnableJpaAuditing을 Spring Boot 애플리케이션 메인 클래스에 추가.
@EnableJpaAuditing @SpringBootApplication public class SpringDataJpaApplication { public static void main(String[] args) { SpringApplication.run(SpringDataJpaApplication.class, args); } }
2. BaseEntity 생성 및 Auditing 관련 어노테이션 적용.
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {
@CreatedDate
@Column(updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime createdAt;
@LastModifiedDate
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime modifiedAt;
}
- Auditing 적용 Entity가 BaseEntity 상속.
@Entity public class User extends BaseEntity { @Id private Long id; private String name; }
상속만으로 Entity 저장/수정 시 createdAt, modifiedAt 필드 자동 관리됨.
'Programing > Spring' 카테고리의 다른 글
| @Entity 엔티티에서 사용하는 어노테이션과 이유 (0) | 2025.05.20 |
|---|---|
| Spring Data JPA 인터페이스 메서드 자동 실행 원리 (0) | 2025.05.16 |
| JPA vs Spring Data JPA (0) | 2025.05.16 |
| 연관관계 매핑 (0) | 2025.05.16 |
| JPA 기본 키(Primary Key) 매핑 (0) | 2025.05.15 |