본문 바로가기

전체 글120

JPA - 연관관계 매핑 기초(3) : 양방향 연관관계와 연관관계의 주인 (2) 1. 양방향 연관관계와 연관관계의 주인 (2) - 주의점, 정리 양방향 매핑시 가장 많이 하는 실수 연관관계의 주인에 값을 입력하지 않는다. 양방향 매핑시 연관관계의 주인에 값을 입력해야 한다. 양쪽에 값을 설정하지 않고 주인에만 값을 설정할 경우 발생하는 문제 2가지 1. 값이 정상적으로 출력되지 않는다. 연관관계의 주인에만 값을 입력하고 ex) member.setTeam(team); 바로 Team.getMembers()하고 for문을 돌려 member 값을 출력해보면 값이 출력되지 않는다. 왜냐하면 Team의 객체는 현재 DB에 insert되지 않은 영속성 컨텍스트 1차 캐시저장소에만 저장되있는 순수한 객체 상태이기 때문이다. 물론em.flush(), em.clear()를 해준 상태로 team.get.. 2022. 4. 9.
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매핑할 테이블 이름엔티티 이름을 사용catalog데이터베이스 catal.. 2022. 4. 8.