/ SPRING BOOT, SPRING, JPA

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;
}