[Spring] TransientPropertyValueException: object references an unsaved transient instance
문제 상황
User, Measurement 엔티티가 서로 관계를 맺고 있는 상태에서 User 객체를 생성자를 통해 만들어주는 경우 User의
Measurement를 new Measurement()로 객체를 생성해 등록해줬었고, 테스트해보는 과정 중에 문제가 발생했다.
org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing
해결 방법
새로 생성한 Measurement 객체가 영속성 컨텍스트 내에서 관리되고 있는 상황이 아니고 애초에 관리됐던 시점이 없으므로 PK가
존재하지 않는다. 그런 객체를 새 User 객체에 연결해주려 하니 FK가 없어 문제가 생긴 것이다. 그래서 새 Measurement 객체
를 DB에 저장한 뒤에(=PK 값이 설정된 뒤에) 활용하기로 했다.
@Transactional
public User save(SignUpDto signUpDto) {
Measurement measurement = measurementRepository.save(new Measurement()); //Measurement 저장
User user = new User(signUpDto, passwordEncoder.encode(signUpDto.getPassword()), measurement);
measurement.setUser(user);
return userRepository.save(user);
}
댓글남기기