티스토리 뷰
자바 진영의 JPA와 TypeScript 진영의 TypeORM은 비슷한듯 다르다.
서비스 개발을 하면서 TypeORM을 사용했을 때는 TypeORM로 데이터를 조회할 때 자동으로 SoftDelete된 데이터는 제외해주는 기능이 있었는데, JPA에는 그런 기능이 없는 것이다.
import jakarta.persistence.*;
import org.hibernate.annotations.*;
@Entity
@SQLDelete(sql = "UPDATE my_table SET is_deleted = true WHERE id = ?")
@Where(clause = "is_deleted = false")
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@Column(name = "is_deleted")
private Boolean isDeleted = false;
// getters and setters
}
JPA에서는 위에서 보면 알 수 있듯, @SQLDelete로 DELETE 대신 특정 SQL이 실행되도록 설정해주고, @Where로 조회시 자동으로 조건문이 추가되도록 해준다.
기능 | TypeORM | JPA + Hibernate |
Soft Delete 설정 | @DeleteDateColumn | @SQLDelete + @Where |
기본 조회 | deletedAt IS NULL 자동 추가 | @Where로 조건 명시 필요 |
복구 기능 | repository.restore(id) | 별도 복구 로직 작성 필요 |
Native Query 지원 | withDeleted 옵션으로 쉽게 제어 가능 | Native Query는 수동으로 조건 추가 필요 |
이렇게 보니 TypeORM이 좀 더 이용하기 편리한 것 같다.
300x250
'공부흔적 > JPA' 카테고리의 다른 글
JPA 간단 정리 (0) | 2023.01.03 |
---|---|
Gradle 프로젝트 JPA Oracle 연결하기 (0) | 2021.04.25 |
JPA가 제공하는 데이터베이스 기본 키 생성 전략 (0) | 2021.04.07 |
영속성 컨텍스트 초기화(clear)와 종료(close), 비영속과 준영속 (0) | 2021.04.06 |
SQL Mapper와 ORM(Object-Relational Mapper) (0) | 2021.04.02 |