본문 바로가기
Error

attempted to assign id from null one-to-one property

by YoonJong 2022. 11. 18.
728x90

에러내용

 

에러원인

one to one 의 속성에 null 값이어서 발생한 에러이다.

아래와 같은 구조에서 나타났다.

처음 매핑해보는 구현이라 시간이 오래걸렸다.

 

에러조치

현재 코드의 구조는 아래와 같다.

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "goods")
@Getter
@Entity
public class Goods extends BaseTimeEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "goods_id")
    private Long id;   //상품번호(PK)

...
...

    // pk 값 공유
    @OneToOne (cascade = CascadeType.ALL, mappedBy = "goods")
    private Option option;

 

@Getter
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@TypeDef(name = "json", typeClass = JsonStringType.class)
public class Option {

    @Id
    private Long id;

...
...

    @OneToOne(fetch = FetchType.LAZY)
    @MapsId
    @JoinColumn(name = "goods_id")
    private Goods goods;

 

아래 옵션 클래스에 Goods 에 값을 줄 수 있는 메서드를 작성했다.

public void setGoods(Goods goods) {
    this.goods = goods;
}

이후 서비스 로직에서 상품 정보를 찾아온 후 상품 정보 데이터를 이용해 세팅해 해결했다.

// 상품 정보저장
Goods goods = Goods.toGoods(goodsCreateRequest);
goodsRepository.save(goods);

// 옵션 정보저장
Option option = Option.toOption(optionCreateRequest);
option.setGoods(goods);
optionRepository.save(option);
728x90

댓글