에러 전문

🤔원인

AnalysisResult(이하 result)에서 @CreationTimestamp로 createdAt을 저장한다.

save()로 저장된 result에는 createdAt이 null로 담겨있는 문제가 발생.

  @Transactional
  public AppraisalResponse appraise(final long memberId, final AppraisalRequest request) {
      // AI 서버에 요청
      
      AppraisalAIResponse appraisalResponse = response.getBody();

      AnalysisResult savedResult = saveAppraisal(memberId, appraisalResponse);

      return AppraisalResponse.from(savedResult);
  }

  private AnalysisResult saveAppraisal(final long memberId, final AppraisalAIResponse response) {
      // TODO 커스텀 예외 처리

      Member member = memberRepository.findById(memberId).orElseThrow(() -> BaseException.from(MEMBER_NOT_FOUND));
      AnalysisResult result = response.toEntity();
      result.update(member);
      return resultRepository.save(result);
  }

from()의 savedResult의 createdAt이 null로 표기된다.

✅해결 방법

Hibernate의 @CreationTimestamp는 insert 시점에 DB에 처리되고, flush 이전에는 엔티티 필드에 반영되지 않는다.

다시 조회하는 대신 직접 flush를 수행하자.

Hibernate에선 save 후에 flush 할 수 있는 메서드를 제공한다.

saveAndFlush()를 통해 해결했다.