JPA 에러: save the transient instance before flushing

2022. 6. 7. 00:21ERROR

개인 프로젝트의 테스트 코드에서 위와 같은 에러가 발생했다. 

오브젝트가 저장되지 않은 인스턴스를 참조하고 있다는 메시지로 보인다. 
검색 결과 FK 로 사용되는 컬럼에 값이 없는 상태에서 데이터를 넣으려다 발생한 에러인 듯 싶다.

예를 들어 멤버(id, name, team_id), 팀(id, name)의 테이블에서 팀의 데이터가 없는 채로 멤버의 데이터를 넣으려고 하면 위의 에러가 발생한다는 뜻이다. 

이 경우 멤버를 영속상태로 만들때 팀도 자동으로 영속화해주는 Cascade 옵션을 사용해 해결이 가능하다.
상품(Item) 1 :  N ItemCategory N : 1 카테고리(Category) 의 테이블에서

    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
    @JoinColumn(name = "ITEM_ID")
    private Item item;

    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
    @JoinColumn(name = "CATEGORY_ID")
    private Category category;

영속성전이로 해결했다.