설정에서 변경 처리를 해야하는 것
Settings > Build,Execution,Deployment > Build Tools > Gradle > "Run tests using: IntelliJ IDEA" 로 변경
JPA 관련 Hibernate 에러:
object references an unsaved transient instance - save the transient instance before flushing
JPA 연관 관계 테스트 중에 발생했습니다.
FK 로 사용되는 컬럼값이 없는 상태에서 데이터를 넣으려다 발생한 에러입니다.
예를 들어 Person (id, name) 이라는 테이블과 House (id, address, person_id) 라는 테이블 관계가 있을 때, Person 데이터를 넣지 않고 House 데이터를 넣으려고 하면 person_id 값이 없어서 에러가 발생합니다.
Person person = new Person("Alice");
House house = new House("Seoul", person);
houseRepository.save(house); // 에러 발생 (person 의 id 값을 모르는데 테이블에 넣으려고 해서)
연관 관계 매핑해줄 때 사용하는 @ManyToOne, @OneToOne, @OneToMany 어노테이션에 cascade 옵션을 설정해줍니다.
cascade 는 "영속성 전이" 라고 하는 개념인데 특정 엔티티를 영속화 할 때 연관된 엔티티도 함께 영속화 합니다.
저장할 때만 사용하려면 cascade = CascadeType.PERSIST
로 설정해주면 되며, 전체 적용인 CascadeType.ALL
로 설정해도 됩니다.
그럼 House 데이터를 저장하기 전에 Person 값부터 저장합니다.
아직 cascade에 대해 정확한 개념이 없기때문에 연관관계가 맺어진 필드에 CascadeType.ALL
속성을 설정했더니 해결되었다.