스프링/JPA

JPA-다대다 매핑

coffee. 2023. 9. 2. 11:15

주문 목록을 구현 할때 우리는 다음과 같이 모델링을 하게 됩니다.

주문 er-다이어그램

사용자(1)은 여러주문(N)을 요청할 수 있습니다.

상품(1)은 여러 주문(M)에 포함됩니다.

 

@OneToMany와

@ManyToOne으로 구현 할 수 있습니다.

 

@Data
@Entity
@Table
public class Member {

	@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	
	@Column(name = "name")
	private String name;
	
	@OneToMany(mappedBy = "member")
	private List<Order> orderList=new ArrayList<Order>();
	
}
@Data
@Entity
@Table
public class Product {
	
	@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	
	@Column(name = "product_name")
	private String product_name;
	
	
	@OneToMany(mappedBy = "product")
	private List<Order> orderList=new ArrayList<Order>();
	
}

 

@Data
@Entity
@Table(name = "ORDERS")
public class Order {
	
	@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	
	@ManyToOne
	@JoinColumn(name = "member_id")
	private Member member;
	
	@ManyToOne
	@JoinColumn(name = "product_id")
	private Product product;
}

 

 

public class Test {

	public static void main(String[] args) {
		
		EntityManagerFactory emf=Persistence.createEntityManagerFactory("hello");
		EntityManager em=emf.createEntityManager();
		try {
			em.getTransaction().begin();
			
			
			Member member1=new Member();
			member1.setName("홍길동");
			em.persist(member1);
			
			Product product1=new Product();
			product1.setProduct_name("전자레인지");
			em.persist(product1);
			
			Product product2=new Product();
			product2.setProduct_name("세탁기");
			em.persist(product2);
			
			Order order=new Order();
			order.setMember(member1);
			order.setProduct(product1);
			em.persist(order);
			
			Order order2=new Order();
			order2.setMember(member1);
			order2.setProduct(product2);
			em.persist(order2);
			
			

			
			em.getTransaction().commit();
			
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			emf.close();
		}
		
		
		

	}
	
	
	
	
	
	
	
}

member,product,orders

 

 

사실 @OneToMany와 @ManyToOne을 사용하는 방법 말고도 @ManyToMany를 사용하는 방법이 있지만 

가독성 면에서 그렇게 추천되지는 않습니다.