@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
}
- @SQLDelete:
- sql = "UPDATE hub SET is_deleted = true WHERE id = ?": 이 SQL 구문은 엔티티가 삭제될 때 실제로는 DELETE가 아닌 UPDATE 쿼리가 실행되며, is_deleted 플래그를 true로 설정합니다.
- @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 |