2023-02-05

강혜성·2023년 2월 5일
0

ZZALU 프로젝트

목록 보기
5/11

JPA Update Query

  • 단순히 update query를 사용하게 될 경우 영속성 컨텍스트에 의해 문제가 발생.
    영속성 컨텍스트 : 엔티티를 영구 저장하는 환경, 식별자 값으로 구분된다.
  • update query는 영속성 컨텍스트에 저장된 캐시값을 변경하지 않은 채로 DB에 query를 날리기 때문에 실제 DB와 영송성 컨텍스트에 저장된 값은 다르게 된다.
  • save()를 사용하게 될 경우 기존에 정보가 남아있는경우 insert가 아닌 update가 실행된다.
1. Insert와 Update를 구분하는 방법은 SimpleDataJpaRepository에 나와있다.
2. JPA에서 save()를 호출 할 경우 SimpleDataJpaRepository의 EntityInformation type 필등인 entityInformation이 Entity의 메타 데이터를 가지고 있다.
3. EntityInformation의 isNew에서 새로운 Entity인지 판단한ㄷ.
  • save()를 이용하여 Update Query 작성
1. Controller
@PutMapping("/gif")
    public ResponseEntity<Gifs> updateGifs(@RequestBody GifsUpdateDto gifsUpdateDto) {
        Gifs gifs = gifsService.gifDetailUpdate(gifsUpdateDto);
        return ResponseEntity.ok().body(gifs);
    }


2. Service 
public Gifs gifDetailUpdate(GifsUpdateDto gifsUpdateDto){
        Optional<Gifs> optionalGifs = findById(gifsUpdateDto.getId());
        if(optionalGifs.isPresent()) {
            Gifs gifs = optionalGifs.get();
            gifs.setTags(gifsUpdateDto.getTags());
            gifs.setSources(gifsUpdateDto.getSources());
            gifs.setSourcesPostUrl(gifsUpdateDto.getSourcesPostUrl());
            gifs.setSourcesTld(gifsUpdateDto.getSourcesTld());
            gifs.setRelationsVideo(gifsUpdateDto.getRelationsVideo());
            gifs.setDescription(gifsUpdateDto.getDescription());
            gifRepository.save(gifs);
            return gifs;
        } else {
            return null;
        }
    }

ZZALU 프로젝트 필요기능

  1. CI/CD
  2. 채팅방관련 (진행하는 중)
  3. 짤관련 (짤 수정페이지, 짤 통계) (진행하는 중)
    3-1. 짤 수정페이지 수정 권한 설계필요
  4. 관리자 페이지
  5. Oauth
  6. 제목학원 Redis - WebSocket 연결
  7. 짤 관련 Script 작성 (Tenor API)
  8. 짤 업로드 페이지 S3 (가능하다면 중복 제거), S3 생성
  9. 사용자 맞춤 추천 알고리즘
  10. kafka (이벤트 기반 아키텍처 구현)
  11. 제목학원 완료 이벤트 구현
  12. 역대 제목학원 (DB, API, 페이지)

0개의 댓글