이것 아마 인프런 예제와 동일하거나 최소한 비슷한 듯. 요구사항 분석 회원은 상품을 주문할 수 있다. 주문 시 여러 종류의 상품을 선택할 수 있다. 기능 목록 회원 기능 회원 등록 회원 조회 상품 기능 상품 등록 상품 조회 상품 수정 주문 기능 상품 주문 주문 내역 조회 주문 취소 완성된 페이지 모양 도메인 모델 분석 회원과 주문의 관계 회원은 여러 번 주문할 수 있다.(일대다) 주문과 상품의 관계 주문할 때 여러 상품을 선택할 수 있다. 같은 상품도 여러 번 주문될 수 있다. '주문상품'이라는 모델을 만들어서 다대다 관계를 일대다, 다대일 관계로 풀어낸다. 테이블 설계 엔티티 설계와 매핑 이제, 기초 코드 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..
* JPA가 내부적으로 어떤 매커니즘으로 동작하는지에 대한 매커니즘적 측면 * 실제 설계적 측면 - 객체와 관계형 데이터베이스를 어떻게 매핑해서 쓰는지 소개 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @OneToOne, @ManyToOne, @OneToMany, @ManyToMany, @JoinColumn - JPA에서 가장 중요한 일은 엔티티와 테이블을 정확하게 매핑하는 것. 따라서 매핑 어노테이션을 정확하게 숙지해야 한다. 객체와 테이블 매핑 @Entity • @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. • JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 => 붙지 않으면 JPA가 ..
플러시(flush) : 영속성 컨텍스트의 변경내용을 데이터베이스에 반영 플러시 발생 변경 감지 수정된 엔티티 쓰기 지연 SQL 저장소에 등록 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송(등록, 수정, 삭제 쿼리) 영속성 컨텍스트를 플러시하는 방법 • em.flush() - 직접 호출 • 트랜잭션 커밋 - 플러시 자동 호출 • JPQL 쿼리 실행 - 플러시 자동 호출 -> em.flush를 해도 1차캐시는 유지가 된다. 그냥 쓰기지연 저장소에 쌓인 것들과 바귄 것들이 저장된다고 보면 된다. JPQL 쿼리 실행 시 플러시가 자동으로 호출되는 이유 플러시 모드 옵션 플러시는!!!!!!!!!!! 준영속 상태 준영속 상태로 만드는 방법 실습 저장을 미리 하고싶으면(커밋시점 전에) public class ..
JPA에서 가장 중요한 2가지 • 객체와 관계형 데이터베이스 매핑하기 (Object Relational Mapping) - 정적인 매핑 과정 • 영속성 컨텍스트 - 실제 동작 엔티티 매니저 팩토리와 엔티티 매니저 영속성 컨텍스트 • JPA를 이해하는데 가장 중요한 용어 • “엔티티를 영구 저장하는 환경”이라는 뜻 • EntityManager.persist(entity); => DB에 저장한다기 보단, 영속성 컨텍스트를 통해 엔티티를 영속화하는 개념 (즉 이거는 DB에 저장이 아닌 영속성 컨텍스트에 저장한다.) • 영속성 컨텍스트는 논리적인 개념 • 눈에 보이지 않는다. • 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 J2SE 환경 : 엔티티 매니저와 영속성 컨텍스트가 1:1 - 엔티티 매니저를 생성하면..