@SQLDelete는 Hibernate에서 제공하는 어노테이션으로, 엔티티의 삭제가 이루어질 때 실제로 데이터베이스에서 삭제하는 대신, 논리적인 삭제(logical delete)를 처리할 수 있도록 커스텀 SQL 쿼리를 정의하는 데 사용됩니다. 즉, 엔티티가 삭제될 때 단순히 삭제되었다고 표시하는 방법으로, 보통 삭제 여부를 나타내는 플래그(isDeleted 등)를 업데이트하는 방식으로 구현됩니다.

@Entity
@SQLDelete(sql = "UPDATE hub SET is_deleted = true WHERE id = ?")
@SQLRestriction("is_deleted = false")
public class Hub {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private String address;

    private double latitude;
    private double longitude;

    @Column(name = "is_deleted")
    private boolean isDeleted = false;

    // Getters and setters
}
  1. @SQLDelete:
    • sql = "UPDATE hub SET is_deleted = true WHERE id = ?": 이 SQL 구문은 엔티티가 삭제될 때 실제로는 DELETE가 아닌 UPDATE 쿼리가 실행되며, is_deleted 플래그를 true로 설정합니다.
  2. @SQLRestriction:
    • @SQLRestriction("is_deleted = false"): 이 조건은 엔티티가 조회될 때 is_deleted가 false인 데이터만 조회하도록 필터를 적용합니다. 즉, 삭제된 데이터는 기본적으로 조회되지 않습니다.

'Java' 카테고리의 다른 글

함수형 인터페이스  (0) 2024.11.25
JVM 메모리 구조  (0) 2024.11.02
참조형 변수 캐싱  (0) 2024.11.01
기본형 VS 참조형  (1) 2024.10.31
epuals()와 hashCode() 오버라이딩  (0) 2024.03.07

+ Recent posts