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
댓글