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
Uh oh!
There was an error while loading. Please reload this page.
-
이번에 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