본문 바로가기

JPA24

JPA - 연관관계 매핑 기초(2) : 양방향 연관관계와 연관관계의 주인 (1) 양방향 연관관계와 연관관계의 주인 (1) - 기본 Member의 엔티티는 단방향과 동일 Team 엔티티는 컬렉션 추가 ※ mappedBy mappedBy는 반대편에 어느 컬럼과 매핑되었는가를 정의해주면 된다. mappedBy는 연관관계의 주인이 아니라는 뜻도 내포되어 있다. mappedBy는 읽기만 가능하다 (ReadOnly) 반대방향으로 객체 그래프 탐색 객체와 테이블이 관계를 맺는 차이 객체 연관관계 = 2개 • 회원 -> 팀 연관관계 1개(단방향) • 팀 -> 회원 연관관계 1개(단방향) 테이블 연관관계 = 1개 • 회원 팀의 연관관계 1개(양방향) 테이블에서는 FK 값 하나로 양방향 연관관계 가질 수 있다. (양쪽으로 JOIN가능) 객체의 양방향 관계 • 객체의 양방향 관계는 사실 양방향 관계가 .. 2022. 4. 9.
JPA - 연관관계 매핑 기초(1) : 연관관계가 필요한 이유, 단방향 연관관계 목표 1. 객체와 테이블 연관관계의 차이를 이해 2. 객체의 참조와 테이블의 외래 키를 매핑 (@JoinColumn) 3. 용어 이해 • 방향(Direction): 단방향, 양방향 • 다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) • 연관관계의 주인(Owner): 객체 양방향 연관관계는 관리 주인이 필요 연관관계가 필요한 이유 데이터베이스 테이블과 객체는 근본적으로 차이가 있다. 객체를 테이블에 맞추어 모델링 할 경우 (연관관계가 없는 객체) 객체의 참조 대신 외래키를 그대로 사용 외래 키 식별자를 직접 다룸 식별자로 다시 조회, 전혀 객체지향적인 방법이 아님 객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다. 테이블은.. 2022. 4. 9.
JPA - 기본 키 매핑 기본 키 매핑 어노테이션 직접할당 : @Id만 사용 자동생성 : @GeneratedValue (네 가지 전략) @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id 자동생성 네 가지 전략 IDENTITY : 기본 키 생성을 데이터베이스에 위임 (MySQL) SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용 (Oracle), @SequenceGenerator 필요 TABLE : 키 생성용 테이블 사용, (모든 DB에서 사용), @TableGenerator 필요 AUTO : 방언에 따라 자동 지정 (기본 설정) IDENTITY 전략 • 기본 키 생성을 데이터베이스에 위임 Insert시 id값을 null 값으로 세팅해야한다. (id 값을 .. 2022. 4. 9.
JPA - 필드와 컬럼 매핑 매핑 어노테이션 정리 어노테이션 설명 @Column 컬럼 매핑 (옵션 줄거 아니면 안써도 된다) @Enumerated enum 타입 매핑 @Tempora 날짜 타입 매핑 @Lob (속성없음) BLOB, CLOB(변수가 String일 경우) 매핑 @Transient (속성없음) 필드를 컬럼에 매핑하지 않음 @Column 속성 속성 설명 기본값 name 필드와 매핑할 테이블의 컬럼 이름 객체의 필드 이름 insertable, updatable 등록 가능, 변경 가능 여부 (기본이 true기때문에 updatablee=false정도만 추가) TRUE nullable (DDL) null 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성 시에 not null 제약조건이 붙는다 TRUE unique (D.. 2022. 4. 9.
JPA - 객체와 테이블 매핑 feat. 데이터베이스 스키마 자동생성 객체와 테이블 매핑 (@Entity, @Table) @Entity @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 ※ 주의 • 기본 생성자 필수 (파라미터가 없는 public 또는 protected 생성자) • final 클래스, enum, interface, inner 클래스 사용X • 저장할 필드에 final 사용 X @Entity의 속성 • JPA에서 사용할 엔티티 이름을 지정한다. • 기본값: 클래스 이름을 그대로 사용(예: Member) • 같은 클래스 이름이 없으면 가급적 기본값을 사용한다. @Table @Table은 엔티티와 매핑할 테이블 지정. 속성 기능 기본값 name 매핑할 테이블 이름 엔티티 이름을 사용 ca.. 2022. 4. 8.