리뷰엔티티의 order_num이 orderDetail엔티티의 복합키(order_num+prod_num)을 one to one으로 참조해야했다.
처음에는 아래와 같이 Review엔티티에는
@OneToOne
@JoinColumns({ @JoinColumn(name = "order_num", nullable = false),
@JoinColumn(name = "prod_num", nullable = false) })
private OrderDetail orderDetail;
을 해주고
package com.myomi.review.entity;
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.myomi.order.entity.OrderDetail;
//import com.myomi.order.entity.OrderDetail;
//import com.myomi.product.entity.Product;
//import com.myomi.product.entity.Product;
import com.myomi.user.entity.User;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@DynamicInsert
@DynamicUpdate
@Entity
@Table(name = "review")
//@SequenceGenerator(
// name =
// "SEQ_REVIEW", // 사용할 sequence 이름
// sequenceName =
// "SEQ_REVIEW", // 실제 데이터베이스 sequence 이름
// initialValue = 1, allocationSize = 1 )
public class Review implements Serializable {
@Id
@Column(name = "num")
//@GeneratedValue(
// strategy = GenerationType.SEQUENCE,
// generator=
// "SEQ_REVIEW")
private Long rNum;
// @OneToOne(mappedBy = "review")
// private BestReview bestReview;
@OneToOne
////@JoinColumn(name="prod_num",nullable=false)
////@JoinColumn(name="order_num",nullable=false)
@JoinColumns({ @JoinColumn(name = "order_num", nullable = false),
@JoinColumn(name = "prod_num", nullable = false) })
private OrderDetail orderDetail;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@Column(nullable = false)
private Long sort;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String content;
@Column(name = "created_date")
@ColumnDefault(value = "SYSDATE")
@JsonFormat(pattern = "yy/MM/dd", timezone = "Asia/Seoul")
private LocalDateTime createdDate;
@Column(nullable = false)
private Long stars;
}
orderDetail에는 아래와 같이 mapsId로 두개의 id를 묶어주고 OneToOne(mappedBy="orderDetail")로 양방향으로 서로 onetoone매핑을 해주었다.
그랬더니 자꾸만 review 엔티티의 prod_num이 자꾸만 product를 참조하는 오류가 발생했다.
해결방법은 orderDetail엔티티에서 onetoone을 해주는게 아니라 OrderDetailEmbedded 객체의 id 안에 있는 변수 oNum과 pNum의 컬럼명을 각각 order_num, prod_num으로 지정해줘서
review엔티티의 joincolum들이 걔네를 참조하게 만들어주면 되는거였다.
잘 참조해오는것을 볼수있다.
근데 테스트를 해보니 자꾸 이런 에러가 뜬다 ㅠㅠ 그래서 결국은 아직 미해결상태 ㅠㅠ
였으나 해당 에러는 OrderDetailEmbedded class의 자식인 orderDetail에서 만든 order_info 테이블에 아무것도 인서트되어있지 않아서 그런거였다.