스프링/JPA
JPA-다대다 매핑
coffee.
2023. 9. 2. 11:15
주문 목록을 구현 할때 우리는 다음과 같이 모델링을 하게 됩니다.
사용자(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();
}
}
}
사실 @OneToMany와 @ManyToOne을 사용하는 방법 말고도 @ManyToMany를 사용하는 방법이 있지만
가독성 면에서 그렇게 추천되지는 않습니다.