목록전체 글 (147)
BE전문가 프로젝트
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cwAJuP/btrPJYdSuSH/62R0r1KKny7NCKq7FLO8gK/img.png)
배송, 카테고리 추가 - 엔티티 주문과 배송은 1:1(@OneToMany) 상품과 카테고리는 N:M(@ManyToMany) 배송, 카테고리 추가 - ERD 주문과 배송 1:1관계 Order가 연관관계의 주인인 관계 @Entity @Table(name = "ORDERS") //ORDERS는 ORDER BY라는 명령어가 있기 떄문에 S를 붙여준다 public class Order { @Id @GeneratedValue @Column(name="ORDER_ID") private long id; @ManyToOne @JoinColumn(name="MEMBER_ID") private Member member; @OneToOne @JoinColumn(name = "DELIVERY_ID") private Delive..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/3OJ0Z/btrPhnMdLSg/viK1R42RNhFjt1cAEzPO60/img.png)
일대일 관계 일대일 관계는 그 반대도 일대일 주 테이블이나 대상 테이블 중 외래 키 선택 가능 외래 키에 데이터베이스 유니크(UNI)제약조건 추가 일대일: 주 테이블에 외래 키 양방향 정리 다대일 양방향 매핑 처럼 외래 키가 있는 곳이 연관관계의 주인 반대편은 mappedBy적용 Member와 Locker 중 Member가 연관관계 주인일 때 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name="USERNAME") private String username; @ManyToOne @JoinColumn(name="TEAM_ID") private Team team; @OneToOne @JoinColumn(name="LO..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/LmhqV/btrO79u1pMR/yooxysEjqg2GMCfJfFYkwk/img.png)
@Entity public class Team { @Id @GeneratedValue @Column(name="TEAM_ID") private Long id; private String name; @OneToMany @JoinColumn(name = "TEAM_ID") private List members = new ArrayList(); //ArrayList로 초기화 하는 것(관례) add시 nullpoint가 안뜬다. } package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import ja..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/XyOpd/btrO0JhlQ4z/QJVTJDazS3jStlljpFpQ9K/img.png)
연관관계 매핑시 고려사항 다중성 단방향, 양방향 연관관계의 주인 다대다(N:N)은 실무에서 절대로 사용하지 않는다 테이블 -외래키 하나로 양쪽 조인 가능 - 사실 방향성이라는 개념이 없다 객체 - 참조용 필드가 있는 쪽으로만 참조 가능 - 한쪽만 참조하면 단방향 - 양쪽이 서로 참조하면 양방향 다대일(N:1) - 항상 N쪽에 외래키(주인)이 있어야 한다. - 가장 많이 사용하는 연관관계의 - 다대일의 반대는 일대다 다대일 단방향 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name="USERNAME") private String username; @ManyToOne @JoinColumn(name="TEAM_ID") ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ZWL4Y/btrOQhfOEPh/rBk1pPW58ViPpjx4zGmAN1/img.png)
양방향 매핑시 가장 많이 하는 실수 연관관계의 주인에 값을 입력하지 않았을 때 나오는 현상이다. 지금 연관관계의 주인은 Member에 있는 team이다. 따라서 값을 넣을 때는 member.setTeam을 해줘야 제대로된 값이 입력되는 것을 확인할 수 있다. package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; public class JPAMain { public static void main(String[] args) { En..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/db6qJc/btrOUNwLeRc/pPvtLXNOImM5hkOpqAJEm0/img.png)
package hellojpa; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity public class Team { @Id @GeneratedValue @Column(name="TEAM_ID") private Long id; @Column(name="USERNAME") private String name; @OneToMany(mappedBy = "team")//어떤것과 연결되어 있는지(Member에 보면 team(변수명)을 볼 수 있다) private List members = new ArrayList(); //ArrayList로 초기화 하는 것(관례) add시 nullpoint가 안뜬다. } ma..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nXG0n/btrN5kC5FER/9nekiqhKumbY8AfvrvvKo1/img.png)
객체와 테이블 연관관계의 차이를 이해 객체의 참조와 테이블의 외래키를 매핑 용어 이해 용어 설명 방향 단방향, 양방향 다중성 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:N) 연관관계의 주인 객체 양방향 연관관계는 관리 주인이 필요 연관관계가 필요한 이유 객체지향 설계의 목표는 자율적인 객체들의 "협력 공동체" 를 만드는 것이다. 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계이다. 연관관계 설정 전 package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Ent..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bKjMDG/btrN5wKsnu6/iuMqPCuYuXAusUh9LzA000/img.png)
요구사항 회원은 상품을 주문할 수 있다. 주문 시 여러 종류의 상품을 선택할 수 있다. 지금은 maven이라 실행시 그대로 컬럼을 저장하지만 Spring boot에서 hibernate를 사용하면 스네이크표기법(order_id)으로 컬럼이 추가된다. public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); //트랜잭션 시작 try{ Or..