DBμμ μ€μ λ°μ΄ν°λ₯Ό μμ νλκ²μ΄ μλ deleted μ κ°μ μμ μ¬λΆλ₯Ό λνλ΄λ νλλ₯Ό
μΆκ°νμ¬ λ°μ΄ν°μ μνλ₯Ό κ΄λ¦¬νλ λ°©λ²μ΄λ€.
public abstract class BaseEntity {
...
@Column(nullable = false)
private Boolean deleted = false;
...
}
BaseEntity μ ν΄λΉ νλλ₯Ό μΆκ°νμ¬ λ°μ΄ν°μ μνλ₯Ό μΆμ νλλ‘ μ€κ³νλ€.
public void delete(Long id, CustomUserDetails userDetails) {
Post foundPost = postDomainUtils.validateUserAccessToPost(id, userDetails);
postRepository.delete(foundPost); // DBμμ λ°μ΄ν°κ° μμ λ¨
}
JPA Repositoryμ κΈ°λ³Έ delete λ©μλλ₯Ό μ¬μ©νλ©΄ μ€μ DB λ°μ΄ν°κ° μμ λκΈ°μ
λ
Όλ¦¬μ μμ λ₯Ό μ μ©ν κ²½μ° μλμ κ°μ΄ μμ λ©μλμ λ³κ²½μ΄ νμνλ€.
//service
@Transactional
public void delete(Long id, CustomUserDetails userDetails) {
Post foundPost = postDomainUtils.validateUserAccessToPost(id, userDetails);
foundPost.setDeleted(true); // μνκ° λ³κ²½μΌλ‘ λ
Όλ¦¬μ μμ μ²λ¦¬
}
μν°ν°μ deleted νλλ₯Ό true λ‘ λ³κ²½νλ λ°©μμΌλ‘
JPA μ λν°μ²΄νΉ(dirty checking)μ μν΄ λ³κ²½μ¬νμ΄ μλμΌλ‘ DBμ λ°μλλ€.
λ
Όλ¦¬μ μμ μ DBμλ λ°μ΄ν°κ° κ·Έλλ‘ μ‘΄μ¬νκΈ° λλ¬Έμ findById(id)μ κ°μ΄ κΈ°λ³Έ μ‘°ν λ©μλ νΈμΆ μ μμ λ λ°μ΄ν°λ μ‘°νλ μ μλ€.
λ°λΌμ λ
Όλ¦¬μ μμ λ₯Ό μ μ©νλ©΄ μ‘°ν λ‘μ§μ λ³κ²½ν΄μΌ νλ€.
λ€μ λ κ°μ§ λ°©λ²μ΄ λνμ μ΄λ€.
@Where μ΄λ
Έν
μ΄μ
νμ©...
@Where(clause = "deleted = false")
public class Post extends BaseEntity { ... }
ν΄λΉ μ΄λ
Έν
μ΄μ
μ λΆμ΄λ©΄ Hibernate κ° μν°ν° μ‘°ν μ νμ deleted = false 쑰건μ μλμΌλ‘ μΆκ°ν΄μ€λ€.
κ°λ¨νκ³ νΈλ¦¬νμ§λ§ Hibernate μ μ© κΈ°λ₯μ΄κ³ μ΅κ·Ό λ²μ μμ deprecated λμ΄ μ¬μ©μ΄ κΆμ₯λμ§ μλλ€λ λ¨μ μ΄ μλ€.
λ무 μ¨κ²¨μ§ νν°λΌ λλ²κΉ μ΄ νλ€μ΄ λ λͺ μμ μΈ μΏΌλ¦¬ νν°λ§ λ°©μμ κΆμ₯ν¨
public interface PostRepository extends JpaRepository<Post, Long> {
Optional<Post> findByIdAndDeletedFalse(Long id);
}
μ‘°ν λ©μλμ deleted = false 쑰건μ λͺ
μμ μΌλ‘ ν¬ν¨μμΌμ μ‘°ννλ€.
JPA νμ€ λ°©μμ΄κ³ deprecated λ¬Έμ λ μμΌλ©° λ©μλ μ΄λ¦μ μ‘°κ±΄μ΄ λͺ
νν΄ κ°λ
μ±κ³Ό λλ²κΉ
μ μ 리νλ€.
λ¨ μ¬μ©νλ λ©μλλ§λ€ 쑰건μ μ§μ μΆκ°ν΄μΌ νλ λ¨μ μ΄ μλ€.
| λ°©λ² | μ₯μ | λ¨μ |
|---|---|---|
@Where μ΄λ
Έν
μ΄μ
| μλ νν°λ§, κ°λ¨ν¨ | Hibernate μ μ©, deprecatedλ¨ |
| λͺ μμ 쑰건 λ©μλ μ μΈ | JPA νμ€, κ°λ μ± μ’μ, deprecated λ¬Έμ μμ | λ§€λ² μ‘°κ±΄μ μΆκ°ν΄μΌ λ²κ±°λ‘μ |
ν νμμμ λ
Όλ¦¬μ μμ ꡬν μ μ λ κ°μ§ μ‘°ν λ°©λ²μ μ μν μμ μ΄λ€.
νμ¬ νλ‘μ νΈ μν©κ³Ό μ μ§λ³΄μ νΈμμ±μ κ³ λ €ν΄ μ νν μ μλλ‘ μλ΄νλ©΄ μ’μ κ² κ°λ€.