JPA는 Entity를 저장할 때 @Id에 명시된 값으로 엔티티를 관리한다.
musical 객체를 생성한 후 이를 save()의 매개변수로 지정하면 JPA는 이를 새로운 Entity가 아닌 이미 존재하는 Entity로 간주한다.
id = null 일 경우, 새로운 Entity로 간주(INSERT 실행)
아닐 경우, 기존 Entity로 간주(Update 실행)
그렇기 때문에 id로 설정한 값을 가진 Musical 레코드가 존재하지 않는다면, ConstraintViolationException이 발생한다.
해결 방법
Musical savedMusical = musicalRepository.save(musical);
Schedule schedule = new Schedule(
null,
LocalDate.parse("2024-10-17"),
savedMusical,
LocalTime.parse("10:00:00"),
LocalTime.parse("12:30:00")
);
scheduleRepository.save(schedule);
반환된 savedMusical 객체를 사용한다. 이 객체는 데이터베이스와 동기화된 상태이며, 데이터베이스에 저장된 ID값이 포함되어 있어 올바르게 Foreign Key를 설정할 수 있다.
'웹개발 > Spring' 카테고리의 다른 글
Entity 생성 (0) | 2021.03.29 |
---|---|
스프링 빈과 의존관계-(1)컴포넌트 스캔과 자동 의존관계 설정 (0) | 2021.03.02 |
InteliJ 단축키 모음 (0) | 2021.02.19 |
@ResponseBody (0) | 2021.02.17 |