목록Spring/JPA 공부 (39)
코드 그라데이션
이전(예제 1)과 같은 테이블 구조 객체 구조 그러면 Order 테이블에서 MEMBER와 ORDER의 관계 // @Column(name = "MEMBER_ID") // private Long memberId; 이게 필요가 없어지고 @ManyToOne @JoinColumn(name = "MEMBER_ID") private Member member; // 이렇게 바꿔준다. 이렇게 바꿔준다. getter, setter도 변경해서 알맞게 public Member getMember() { return member; } public void setMember(Member member) { this.member = member; } OrderItem 클래스도 마찬가지 ORDERS와 ORDER_ITEM의 관계 // @..
객체와 테이블의 패러다임의 차이를 잘 이해해야 한다. 양방향 매핑 • 테이블은 단방향일 때와 동일하다(변화 x) 왜??? 테이블은 그냥 TEAM_ID(FK)로 join만 하면 됨 => 테이블의 연관관계는 FK 하나로 양방향이 다 있는 것. (FK만 집어넣으면 다 알 수가 있으므로, 더 정확하게 말하면 방향이랄 게 없다.) • 문제는 객체다. Member가 Team을 가졌으므로 member -> team은 가능했으나, team -> member는 방법이 없었다. 그래서 Team에다가 List : member를 넣어줘야 양쪽으로 이동이 가능하다. 즉, 객체는양쪽에 다 세팅이 필요했는데, 테이블은 외래키 하나만 넣어주면 양쪽 다 볼 수(이동) 있다는 차이가 있다. 양방향 매핑 (2) Member 엔티티는 단방..
연관관계 매핑 기초 - 객체가 지향하는 패러다임과 관계형 DB가 지향하는 패러다임이 서로 다르기 때문에 여기서 기인하는 어려움들이 있다. 학습목표 연관관계가 필요한 이유 ‘객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다.’ 예제 시나리오 • 회원과 팀이 있다. • 회원은 하나의 팀에만 소속될 수 있다. • 회원과 팀은 다대일 관계다. 객체를 테이블에 맞추어 모델링(연관관계가 없는 객체) Member @Entity @NoArgsConstructor public class Member { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "MEMBER_ID") private Long id; @Column(name = ..
이것 아마 인프런 예제와 동일하거나 최소한 비슷한 듯. 요구사항 분석 회원은 상품을 주문할 수 있다. 주문 시 여러 종류의 상품을 선택할 수 있다. 기능 목록 회원 기능 회원 등록 회원 조회 상품 기능 상품 등록 상품 조회 상품 수정 주문 기능 상품 주문 주문 내역 조회 주문 취소 완성된 페이지 모양 도메인 모델 분석 회원과 주문의 관계 회원은 여러 번 주문할 수 있다.(일대다) 주문과 상품의 관계 주문할 때 여러 상품을 선택할 수 있다. 같은 상품도 여러 번 주문될 수 있다. '주문상품'이라는 모델을 만들어서 다대다 관계를 일대다, 다대일 관계로 풀어낸다. 테이블 설계 엔티티 설계와 매핑 이제, 기초 코드 Item @Entity public class Item { @Id @GeneratedValue @..
보충 이 IDENTITY 전략은 Id를 내가 직접 넣으면 안 된다. Id가 NULL로 날아오면 그 때 DB에서 Id 값을 직접 세팅해준다. 뭐가 문제냐,id 값을 알 수 있는 시점이 DB에 값이 들어가봐야 안다는 것.그런데 영속성 컨텍스트에서 관리가 되려면 무조건 PK 값이 있어야 했다. 그래서 어떤 제약이 생기느냐...JPA는 PK를 모르니 값을 넣을 수 있는 방법이 없다는 것. 울며 겨자먹기로, IDENTITY 전략에서만 em.persist() 호출하자마자 그 시점에 Hibernate: /* insert inflearn.exjpa.Member */ insert into Member (id, name) values (null, ?) 이렇게 INSERT 쿼리를 날려버린다. (보통 커밋시점에 INSERT ..
기본 키 매핑 어노테이션 기본 키 매핑 방법 AUTO는 셋 중에 하나가 데이터베이스 방언에 맞춰서 선택이 되는 것 IDENTITY 전략 - 특징 실습 다시 로 바꾸고 Member 클래스는 이정도만 남겨놓고 @Entity @NoArgsConstructor public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // String으로 했길래 바꿔서 했는데 안 되었다 >< 오류의 원인이라고... public String getId() { return id; } public void setId(String id) { this.id = id; } @Column(name = "name", nullable..
요구사항 추가 1. 회원은 일반 회원과 관리자로 구분해야 한다. 2. 회원 가입일과 수정일이 있어야 한다. 3. 회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제한이 없다. 변경된 Member 클래스 일단 이 옵션을 살리고. Member @Entity @NoArgsConstructor public class Member { @Id private Long id; @Column(name = "name") // db에는 name이라고 쓰고 싶을 때. private String username; private Integer age; @Enumerated(EnumType.STRING) //DB에는 기본적으로 Enum 타입이 없다. private RoleType roleType; @Temporal(T..