인프런 커뮤니티 질문&답변

dionisos198님의 프로필 이미지
dionisos198

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

영속성 전이(CASCADE)와 고아 객체

soft delete 라는 것을 알고 있습니다. 이에 대해 cascade 하게 삭제가 가능할까요?

작성

·

414

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(삭제)하는 것을 하나의 트랜잭션에 묶어서 처리할 것 같아요.

감사합니다.

dionisos198님의 프로필 이미지
dionisos198

작성한 질문수

질문하기