작성
·
399
1
만약에 Review 가 있고, Review 에 대해 좋아요 기능이 있습니다.
기존 Hard Delete 시 좋아요 엔티티에 @ManyToOne 에 @OnDelete(action = OnDeleteAction.CASCADE) 를 사용 리뷰 삭제시 리뷰에 대한 좋아요도 삭제할 수 있었습니다.
그런데 Review에 대해 Soft Delete 시, 리뷰에 대한 좋아요는 Hard Delete로 삭제한다면 이를 어떻게 구현하면 좋을까요??
1) Review가 delete 될 때마다 그냥 서비스 코드에 리뷰 좋아요 를 Hard delete 로 삭제하는 부분을 작성한다: @OnDelete 쓰다가 이거 쓰면 서러울 것 같아요.
2) DB trigger 를 사용한다. : 애플리케이션에서 코드에서 명시해서 적용할 방법은 없나???
3) EventLister 를 사용한다. : 이러면 Review 가 Update 될 때마다 @PostUpdate 해서 칼럼이 Deleted가 true인지 확인해야 되는데 .. Review 의 delete 칼럼이 업데이트 될때만 적용되는게 아니라 다른 칼럼이 업데이트 될때 이 부분을 항상 체크해주어야 해서 비효율적일것 같구!
4) 양방향 연관관계를 쓰기 싫은데 어거지로 써서
@OneToMany(cascade=remove) 를 사용한다.
1,2,3,4 다 마음에 안드는데 영한 님은 어떻게 사용하실까요?
답변 1
3
안녕하세요. dionisos198님
Review는 Sofe delete, 좋아요는 Hard Delete를 사용한다면 cascade를 사용하는 것이 적합하지 않습니다.
우리가 실제 구현을 할 때는 최대한 단순하게 구현하는 것이 중요합니다.
예를 들어 복잡한 cascade, DB trigger, EventLister 같은 것을 사용하는 것 보다 단순하게 접근하는 것이 중요합니다. 단순하게 접근하는 것이 결과적으로 더 유지보수 하기 좋습니다. (물론 상황에 따라 다를 수는 있습니다.)
저라면 Review는 sofe delete를 해야 하니 관련 컬럼을 update 처리(변경)하고, 좋아요는 Delete(삭제)하는 것을 하나의 트랜잭션에 묶어서 처리할 것 같아요.
감사합니다.