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 |