JPA 관계 심화
스프링 목록
- Spring(1) - 백엔드 초기설정
- Spring(2) -스프링 Client 파일 업로드(1)
- Spring(3) -스프링 Client 파일 업로드(2)
- Spring(4) - 백엔드 RESTFULL 로 바꾸기
- Spring(5) - 게시판 페이징 기능 추가하기
- Spring(6) - 검색 기능 추가
- Spring(7) - 프론트 ContextPath 동적 설정
스프링 부트 목록
- Spring Boot(1) - 스프링 부트 초기설정
- Spring Boot(2) - JPA 사용해 보기
- Spring Boot(3) - JPA 방향설정, 관계설정
- Spring Boot(4) - JPA 심화
- Spring Boot(5) - JPA 일대일 실습
발생한 문제
1. 엔터티에서 @Id어노테이션을 2개 이상 가질경우 영속성 전파 문제
int orderNo
로 할시 영속성 전파 안되는 문제
@Entity
@Table(name = "ORDER_LINE")
public class OrderLine implements Serializable{
`
@Id
@ManyToOne
@JoinColumn(name="order_no")
//영속성 전이때문에 ManyToOne을 쓸수밖에 없다.
// 양방향 처럼보이나, mappedBy 안되있으니깐 양방향아님
private OrderInfo orderNo;
@Id
@ManyToOne
@JoinColumn(name="order_prod_no")
private Product orderProduct;
private int orderQuantity;
복합키 문제 해결법
- 복합키를 표현할 때는 식별자 클레스를 만들어준다.
- @IdClass , @EmbededId 식별자 붙여주기
@IdClass
@Entity
@Table(name = "ORDER_LINE")
//이거사용
@IdClass(OrderLineId.class)
public class OrderLine {
@Id
@ManyToOne
@JoinColumn(name="order_no")
//영속성 전이때문에 ManyToOne을 쓸수밖에 없다.
// 양방향 처럼보이나, mappedBy 안되있으니깐 양방향아님
private OrderInfo orderNo;
@Id
@ManyToOne
@JoinColumn(name="order_prod_no")
private Product orderProduct;
private int orderQuantity;
public class OrderLineId implements Serializable{
private int orderNo;
private int orderProduct;
}
@EmbededId
@Entity
@Table(name = "ORDER_LINE")
public class OrderLine {
@MapId("orderNo")
@ManyToOne
@JoinColumn(name="order_no")
private OrderInfo orderNo;
@MapId("orderProdNo")
@ManyToOne
@JoinColumn(name="order_prod_no")
private Product orderProduct;
@EnbededId
private OrderLineId id;
private int orderQuantity;
public class OrderLineId implements Serializable{
private int orderNo;
private int orderProdNo;
}