NOTE
Content๊ณผ์ ํผ๋๋ฐฑ ๋ด์ฉ์ค์ SQLDelete์ SQL Restriction ์ด๋ ธํ ์ด์ ์ ์๋ ค์ฃผ์ จ๋ค ํํฐ๋๊ป ์ฌ์ญค๋ณด๋ ์ฐ๋ฆฐ ์ด์ฐจํผ BaseEntity์ deletedYN์ผ๋ก ์ญ์ ์ฌ๋ถ๋ ๋ฐ๋ก ๊ด๋ฆฌํ๊ณ ์์๊ธฐ๋๋ฌธ์ ๊ทธ๋ฅ ์๋๋ฐฉ์๋๋ก ํด๋ ๋๋ค๊ณ ํ์ จ์ง๋ง ์๋ก ์๊ฒ๋ ๋ด์ฉ์ด๋ ๊ณต๋ถํด๋ณธ๋ค ๐
soft delete์ hard delete
๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง๊ฐ ์๋ค
- soft delete : ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ญ์ ํ๋๊ฒ์ด ์๋๋ผ deleteYN๊ฐ์ ํ๋๋ฅผ ์ถ๊ฐํด์ ์ญ์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด update๋ก deleteYN ๊ฐ์ ๋ณ๊ฒฝํด์ฃผ๋ ๋ฐฉ์
- hard delete : ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ค์ ๋ก ์ญ์ ํ๋ ๋ฐฉ์
soft delete๋ฅผ ํด์ฃผ๋ฉด ์กฐํํ๋ ๋ก์ง์ ์์ฑํ ๋ deleteYN์ด false์ธ์ง ์ฌ๋ถ๋ ํ์ธํด์ฃผ์ด์ผ ํ๋ค
@Query("select n from p_notices n where n.id = :noticeId and n.deleted_y = false")
Optional<Notice> findById(UUID noticeId);
@SQLDelete
์ด๋ @SQLDelete ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด delete๊ฐ ํธ์ถ๋ ๋ ๋ฐฉ์์ ๋ณ๊ฒฝํ ์ ์๋ค
@SQLDelete(sql = "UPDATE p_notices SET deleted_yn = true WHERE id = ?")
๋จผ์ notice entity์ @SQLDelete ์ด๋ ธํ ์ด์ ๊ณผ ๋์ ์คํ์ํฌ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ค๋ค
public void deleteNotice(UUID noticeId, String userName) {
try {
Notice notice = noticeRepository.findById(noticeId).orElseThrow(() -> new BaseException(ErrorCode.INVALID_PARAMETER));
// notice.setDeletedYnTrue(userName);
// noticeRepository.save(notice);
noticeRepository.delete(notice);
} catch (Exception e) {
throw new BaseException(ErrorCode.INVALID_PARAMETER);
}
}
๊ทธ๋ฆฌ๊ณ ๊ธฐ์กด ์ฝ๋๋ ์ฃผ์์ฒ๋ฆฌํ๊ณ delete๋ก ์์ ํด์ฃผ์๋ค
์์ฒญ์ ๋ณด๋ด๋ณด๋ soft delete๊ฐ ์ ์ ์ฉ๋๊ฒ์ ํ์ธํ ์ ์์๋ค !
public void setDeletedYnTrue(String userName) {
this.deletedYn = true;
this.deletedAt = LocalDateTime.now();
this.deletedBy = userName;
}
์๋ base entity๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ ์ด๋ค๊ฒ ๋ ๋์๋ฐฉ๋ฒ์ธ์งโฆ ๐ค