디스코드 프로젝트 실습: JPA Public 채널생성시 ReadStatus에 채널id가 null값으로 들어간다.

2026. 3. 10. 18:29·코드잇 스프린트/실습

ChannelService

@Override
    public Channel create(PublicChannelCreateRequest request) {
        String name = request.name();
        String description = request.description();
        Channel channel = new Channel(ChannelType.PUBLIC, name, description);
        List<User> users = userRepository.findAll();
        for (User user : users) {
            ReadStatus readStatus = new ReadStatus(user,channel, Instant.now());
            readStatusRepository.save(readStatus);
        }
        return channelRepository.save(channel);
    }

create()문을 실행시 Console에는 readStatus 릴레이션의 channel_id값이 null로 들어가서 not null 제약 조건을 위반했다고 나온다.

org.postgresql.util.PSQLException: 오류: "channel_id" 칼럼(해당 릴레이션 "read_statuses")의 null 값이 not null 제약조건을 위반했습니다.
@Id
@GeneratedValue

이것은 INSERT가 될때 id값이 만들어지는데 위 creat()문에는 channel을 가장 마지막으로 save하다보니

아직 channel id가 만들어지지않은 상태라서 위와같은 error가 생겼다.

 

@Override
    public Channel create(PublicChannelCreateRequest request) {
        String name = request.name();
        String description = request.description();
        Channel channel = new Channel(ChannelType.PUBLIC, name, description);
        channelRepository.save(channel);
        
        List<User> users = userRepository.findAll();
        for (User user : users) {
            ReadStatus readStatus = new ReadStatus(user,channel, Instant.now());
            readStatusRepository.save(readStatus);
        }
        return channel;
    }

 

channelRepositoy.save()를 통해 channel을 먼저 저장하고, readStatus를 저장하도록 해주었다.

'코드잇 스프린트 > 실습' 카테고리의 다른 글

Findex 프로젝트: 지수정보 목록 조회 Cursor기반 페이지네이션 적용  (0) 2026.03.16
디스코드 프로젝트 실습: JPA N+1 문제 해결하기  (0) 2026.03.11
MapStruct는 <T> 제네릭 타입 메서드 자체는 구현코드 생성 못한다.  (0) 2026.03.10
BinaryContent 저장로직 고도화  (0) 2026.03.09
MapStruct 라이브러리를 통해 Entity를 DTO로 자동 변환  (0) 2026.03.09
'코드잇 스프린트/실습' 카테고리의 다른 글
  • Findex 프로젝트: 지수정보 목록 조회 Cursor기반 페이지네이션 적용
  • 디스코드 프로젝트 실습: JPA N+1 문제 해결하기
  • MapStruct는 <T> 제네릭 타입 메서드 자체는 구현코드 생성 못한다.
  • BinaryContent 저장로직 고도화
과컴
과컴
벡엔드 개발자 최소기준 맞추겠습니다.
  • 과컴
    곽의 프로그램
    과컴
  • 전체
    오늘
    어제
    • 분류 전체보기 (76)
      • 위클리페이퍼 (6)
      • 파이썬 (4)
      • 코드잇 스프린트 (48)
        • Spring 이론 (7)
        • Java이론 (11)
        • 실습 (23)
      • 백엔드 개발자 최소기준 (1)
      • 코딩테스트 (5)
        • 알고리즘 (0)
        • SQL (1)
      • Git (5)
      • 스프링부트 핵심가이드 (1)
      • 트러블 슈팅 (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준1152
    파이썬기초
    백준1075번
    문자열
    백준브론즈
    파이썬
    백준2576
    혼공파
    파이썬입문
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
과컴
디스코드 프로젝트 실습: JPA Public 채널생성시 ReadStatus에 채널id가 null값으로 들어간다.
상단으로

티스토리툴바