Replies: 2 comments 3 replies
-
deletedAt을 가지는 엔티티는
|
Beta Was this translation helpful? Give feedback.
2 replies
-
@SQLDelete 을 사용 시, 적용된 엔티티에서 그리고 희빈님 답변처럼 PK의 컬럼명은 id로 통일하기로 했고 그 외 FK는 풀네임_id로 하기로 하였습니다! 추가로 @where 을 사용 여부는 엔티티 별로 구분하는 게 좋을 것 같습니다! |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
이번에 Room 관련 Entity를 구현하면서 deletedAt을 어떻게 구현할지 고민해보았습니다.
현재 프로젝트에서 쓰이는 BaseTimeEntity에서의 AuditingEntityListener는 delete에 대한 기능을 지원하지 않습니다.
그래서 JPA에서 soft delete를 자동으로 처리해주는 두개의 애노테이션을 찾았습니다. 이 두가지 애노테이션은 Entity의 상단에 적으면 됩니다!
@SQLDelete
: 삭제 로직(엔티티 삭제)이 수행될 때 실제로 데이터를 지우는 DELETE 쿼리 대신 설정한 UPDATE 쿼리를 통해 원하는 필드값을 변경할 수 있습니다. 지금의 같은 경우는 deleted_at 입니다.ex) @SQLDelete(sql = "UPDATE participants SET deleted_at = CURRENT_TIMESTAMP where participant_id = ?")
@Where
: 이 애노테이션은 기본적으로 사용할 where 절을 적용하는 기능을 합니다. 해당 엔티티를 사용, 조회할때 항상 자동으로 추가 해주는 것입니다. Soft delete 한 데이터는 기본적으로 가져올 필요가 없으니 함께 넣어주는 것이 좋다고 생각했습니다. 그러나 이것을 이용하면 필요시 삭제된 엔티티를 가져오는 것은 못하기 때문에 @where 대신 @FilterDef 및 @filter 를 써야하고 더 복잡해집니다.ex) @where(clause = "deleted_at IS NULL") -> 조회할 시
where deleted_at IS NULL
구문이 추가deletedAt을 가지는 엔티티는 일단 @SQLDelete만은 적용해 놓는게 어떨지 논의하기 위해 올립니다!!!
@FilterDef 및 @filter 적용에 대한 것은 추후에 더 알아보고 올려보겠습니다!
Beta Was this translation helpful? Give feedback.
All reactions