작성
·
275
0
안녕하세요. 강의 듣고, jpa이용해서 팀 프로젝트 만들어 보고 있습니다.
다름이 아니라, 게시글 삭제 시, 정말 게시글이 삭제되는 것이 아니라, 게시글 안의 Enum 에 deleted로 변경 해 두고, 일정 시간이 삭제되게 하려고 했습니다.
변경 까지는 문제가 없었는데, 이렇게 기능이 추가가 되니, 기존에 게시 글을 반환하던 쿼리 들에 전부
where status = 'ACTIVE' 와 같은 조건을 넣어주어야 하게 되었습니다.
전부 수작업으로.... 조건을 넣어주는 방법 밖에는 없을까요? 간단한 프로젝트라고 생각해서 QueryDsl은 사용하지 않았습니다.
또 저 조건을 개발자가 전부 쿼리 개발 할 때 필수로 넣어야 된다면, 어쩌다 까먹고 안 넣게되면 삭제 처리 되었던 게시글이 사용자 눈에 보이는..참사가 발생할 것 같습니다.
기존 Repository 쿼리가 실행되기 전에 먼저 article.status = 'ACTIVE' 인 것들만 필터를 하고, 거기에 제가 지금까지 만들어 놓은 쿼리들이 적용이 되면 될 것 같은데, 아무리 찾아봐도 좋은 대안이 보이지가 않아 보여서 혹시나 하는 마음에 질문 드립니다.
감사합니다.
답변 1
0
안녕하세요. lee님, 공식 서포터즈 코즈위버 입니다.
Spring Data JPA Specipication 기능을 응용하면 말씀하신 것처럼은 아니더라도 실수를 방지할 순 있을것 같습니다. 아래와 같은 형태로 ACTIVE 조건을 항상 사용하도록 할 수 있습니다.
List<Board> boardList = boardRepository.findAll((root, query, cb) -> cb.equal(root.get("status"), Status.ACTIVE));
그리고 JPQL 을 사용한다면 쿼리 조건에 상수로 조건식을 걸어버리는 것도 방법이 될 수 있습니다.
감사합니다.