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