[JPA] HibernateException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance @OneToMany 문제
·
Server/Error
예외 발생 현황 Post를 삭제했을 때, Comment와 Like가 함께 삭제될 수 있도록 Post Entity에 Comment와 Like를 @OneToMany를 사용하여 cascade, orphanRemoval을 사용하여 엮었다. Post Entity @AllArgsConstructor @NoArgsConstructor @Getter @Builder @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) @Entity @SQLDelete(sql = "UPDATE post SET deleted_at = current_timestamp WHERE id = ?") @Where(clause = "deleted_at is null") public cl..
[MySQL] current_timestamp를 사용했는데 현재 시간이 다르다면?
·
Basic/Database
서론 역시 프로젝트를 진행하다 보면 블로그에 쓸만한 글감들이 팡팡 튀어 오르는 것 같다. @Modifying에 대해 공부를 하며 프로젝트에 적용을 시키던 도중 @Modifying을 사용하면 @LastModifiedDate 어노테이션이 먹통이 되는지 업데이트가 되지 않는 현상을 발견했다. 그래서 @query를 이용하여 set을 하는 김에 lastModifiedAt 칼럼에 직접 현재 시간을 집어넣기로 했다. @Modifying(clearAutomatically = true) @Query("update Comment c set c.comment = :comment, c.lastModifiedAt = current_timestamp where c.id = :commentId ") void update(@Para..
[JPA] Soft Delete를 위한 @SQLDelete, @Where
·
Server/JPA
Hard Delete? Soft Delete? Delete 처리를 개발하던 도중, Soft Delete와 Hard Delete 두 방법이 존재한다는 것을 알게 되었다. Hard Delete는 물리 삭제라고도 하며, DB에서 해당 데이터를 실제로 삭제하는 것을 의미한다. Soft Delete는 논리 삭제라고도 하며, DB에서 해당 데이터가 삭제된 것을 하나의 컬럼을 이용하여 구분하는 것을 의미한다. 즉, Hard Delete의 경우에는 DB에 Delete Query를 날리게 되고 Soft Delete의 경우에는 DB에 Update Query를 날리게 된다. Soft Delete를 사용하는 이유? 그렇다면 Soft Delete를 왜 사용하게 되는 것일까? Hard Delete를 진행하게 되면 해당 글에 어떤..
[JPA] Update 후 해당 객체를 Return했을 때 @CreatedDate가 null 이 반환되는 상태에 대한 회고
·
Server/Spring&Spring Boot
서론 프로젝트를 진행하면서, 하나의 Update API를 개발하고 있었다. 요구사항에서는 update 후 해당 데이터의 정보를 Return 하도록 구성되어 있었다. 업데이트 처리 후 해당 객체를 바로 Return 하도록 진행하였는데, lastModifiedAt의 경우에는 update 쿼리가 날아간 시간이 잘 적혀있는 반면 createdAt은 Null로 반환되었다. 바로 DB를 실행시켜 해당 데이터를 확인했을 땐, createAt과 lastModifiedAt이 모두 들어있는 상황이었다. Comment Entity ... public class Comment extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private..
[08] Alarm Api 개발
·
프로젝트/Archive
이전글 https://chordplaylist.tistory.com/235 Alarm API 알람 리스트 조회 알람 조회는 모든 회원이 권한을 가집니다. 특정 User의 알람 목록을 받아옵니다. 특정 포스트에 새 댓글이 달리고, 좋아요가 눌리면 알람이 등록됩니다. 알람 목록은 Pagination으로 받아옵니다. (Pageable 사용) 한 페이지당 default 피드 개수는 20개 총 페이지 갯수가 표시 작성날짜 기준으로 최신순으로 sortAlarm Entity 앤드 포인트 GET /alarms 최신 순으로 20개씩 표시 (Pageable 사용) 알람 리스트 조회 시 응답 필드 id : 알람 ID alarmType :알람 타입 (NEW_COMMENT_ON_POST, NEW_LIKE_ON_POST) fro..
[Project] 09. SNS 웹 서비스 제작
·
회고록/Archive
이전글 [Project] 08. SNS 웹 서비스 제작 이전글 [Project] 07. SNS 웹 서비스 제작 이전글 [Project] 06. SNS 웹 서비스 제작 이전글 [Project] 05. SNS 웹 서비스 제작 이전글 https://chordplaylist.tistory.com/219 첫 번째 미션 AWS EC2에 Docker 배포 Gitlab CI & Cronta chordplaylist.tistory.com 두 번째 미션 댓글 좋아요 마이피드 알림 Swagger ApiOperation 사용 도전과제 댓글 좋아요, 알림 UI 구현 Admin 기능 구현 댓글 댓글 작성 및 수정 기능 & 테스트 코드 [06] Comment Api 개발 - 1 이전글 [05] 리팩토링 - 2 이전글 [05] 리팩..
[MySQL Error] Error executing DDL alter table like drop foreign key via JDBC Statement. MySQL 예약어 에러
·
Server/Error
문제 발생 개발을 진행하고 있는 상황이므로 jpa.ddl-auto를 create-drop으로 계속 사용하던 도중, 다음과 같은 에러가 발생하기 시작했다. Error executing DDL alter table like drop foreign key via JDBC Statement Table을 생성하는 도중 계속해서 에러가 발생하였다. 문제 해결 좋아요 기능을 개발하면서 Entity의 이름을 'LIKE'로 지정하면서 발생하게 되는 문제였다. LIKE는 MySQL에서 사용되고 있는 예약어이므로 Entity의 이름으로 사용할 수 없도록 지정되어 있는 이름이었다. 기존 ENTITY ... public class Like extends BaseEntity { @Id @GeneratedValue(strategy..
[07] Like Api 개발
·
프로젝트/Archive
이전글 [06] Comment Api 개발 - 2 이전글 https://chordplaylist.tistory.com/231 댓글 조회 앤드포인트 GET /posts/{postId}/comments[?page=0] 리턴 { "resultCode": "SUCCESS", "result":{ "content":[ { "id": 3, "comment": "comment test3", "userName": "test", "postId": 2, "createdAt" chordplaylist.tistory.com Like API Like API를 개발하면서 삭제 방식을 Hard Delete에서 Soft Delete 방식으로 모두 전환하였습니다. DeleteAt이라는 변수를 Base Entity에 추가하여 Post, ..
코드플리
코드 플레이 리스트