Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
Tags
- aop
- 프로그래머스
- 우선순위 큐(priorityqueue)
- HTML
- 회고
- Spring
- 이진 탐색(binary search)
- 정렬 알고리즘(sort algorithm)
- ArrayList
- 코딩공부
- 항해99
- 배열
- 코딩문제
- 면접(java
- cs 공부)준비
- 자바
- 99클럽
- Java
- 개발자 취업
- GIT
- wil
- 코딩테스트 준비
- Grafana
- Til
- github
- Entity
- 메서드
- css
- 코딩
- 자료구조
Archives
- Today
- Total
hayu's 개발 일지
[TIL]240513 코드에 명시되어 있는 status 값이 DB에 저장이 되지 않는 문제 본문
- 문제
코드에 명시되어 있는 status 값이 DB에 저장이 되지 않는 문제
/* 인원이 다 찼는지 확인 */
if (registeredCount >= totalCount) {
log.info("모임이 가득 찼습니다: {}", meetingId);
meeting.updateStatus();
meetingRepository.save(meeting);
log.info("ID가 {}인 모임의 상태를 FULL로 업데이트했습니다", meetingId);
throw new CustomException(ErrorCode.MEETING_FULL);
}
- 원인
예외 처리 블록 안에 상태 변경 코드를 함께 썼기 때문에 영속성 컨택스트에는 저장이 되었지만 트랜잭션 끝나지 않아서 커밋이 되지 않고 롤백이 된 것 같다.(DB 커밋 저장과 영속성 컨택스트 저장 시점 차이)
- 해결방안
예외 처리와 status 변경 코드를 따로 나누었다.
if (registeredCount >= totalCount) {
throw new CustomException(ErrorCode.MEETING_FULL);
}
/*모임 엔티티의 등록된 참가자 수 업데이트*/
registeredCount = meeting.incrementRegisteredCount(); // 모임 참가자 수 증가
/* 인원이 다 찼는지 확인 */
if (Objects.equals(registeredCount, totalCount)) {
meeting.updateStatus();
}