웹개발/Spring

[Spring] JPA save()

chuseok 2025. 2. 4. 12:10

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를 설정할 수 있다.