| JPQL(Java Persistence Query Language) - 테이블이 아닌 엔티티 객체를 대상으로 검색하는 객체지향 쿼리- SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않음- JPA는 JPQL을 분석한 후 적절한 SQL을 만들어 데이터베이스를 조회- 방언(Dialect)만 변경하면 JPQL을 수정하지 않고 자연스럽게 DB 변경 가능 > 회원 엔티티1234567@Entity(name = "Member")public class Member { @Column(name = "name") private String username; // ...}cs > JPQL- 엔티티 이름과 엔티티 객체의 필드 명으로 작성12String jpql = "select m from Member as m wh..
| 고급 매핑 :상속 관계 매핑 :@MappedSuperclass :복합 키와 식별 관계 매핑 :조인 테이블 :엔티티 하나에 여러 테이블 매핑 || 상속 관계 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현 시 선택할 수 있는 방법 1. 각각의 테이블로 변환 : 각각을 모두 테이블로 만들고 조회 시 조인 사용 2. 통합 테이블로 변환 : 테이블을 하나만 사용해서 통합 3. 서브타입 테이블로 변환 : 서브 타입마다 하나의 테이블 생성 ||| 조인 전략 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본 키 + 외래 키로 사용 12345678910111213141516171819202122232425262728293031323334353637383940..
| 다양한 연관관계 매핑 || 다대일 데이터베이트 테이블의 일(1), 다(N) 관계에서 외래 키는 항상 다(N) 쪽에 존재 ||| 다대일 단방향 [N:1] > 회원 엔티티1234567891011121314151617@Entitypublic class Member { @Id @GeneratedValue @colum(name = "MEMBER_ID") private Long id; private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; // Getter, Setter .. }cs > 팀 엔티티12345678910111213@Entitypublic class Team { @Id @GeneratedValue @Col..
| 연관관계 매핑 객체의 참조와 테이블의 외래 키를 매핑 방향 (Direction) : 단방향, 양방향방향은 객체관계에만 존재하고 테이블 관계는 항상 양방향다중성 (Multiplicity) : 다대일, 일대다, 일대일, 다대다연관관계의 주인 (owner) || 단방향 연관관계 객체 연관관계 : 단방향 관계 Member Team id Team team username id name 테이블 연관관계 : 양방향 관계 MemberTeam id Team team username id name List members ㅇ 객체 연관관계 vs 테이블 연관관계- 객체는 참조(주소)로 연관관계 ㄴ 연관 데이터 조회 시 .get() (참조) 사용 => 단방향ㄴ 객체 그래프 탐색- 테이블은 외래 키로 연관관계ㄴ 연관 데이터 ..
| 엔티티와 매핑 객체와 테이블 매핑 : @Entity, @Table기본 키 매핑 : @Id필드와 컬럼 매핑 : @Column연관관계 매핑 : @ManyToOne, @JoinColumn 12345678910111213141516171819202122232425262728293031323334353637383940414243@Entity// name과 age Column에 unique 제약조건 추가@Table(name="MEMBER", uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_UNIQUE", columnNames = {"NAME", "AGE"} )})public class Member { // 기본키 매핑 @Id @Column(name = "ID..
| 영속성 || 영속성 컨텍스트(persistence context) - 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리- 엔티티 매니저를 생성할 때 하나 만들어짐 -> 엔티티 매니저를 통해 영속성 컨텍스트에 접근할 수 있고, 영속성 컨텍스트를 관리할 수 있음- 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 DB에 반영 == .flush()- 영속 상태의 엔티티는 모두 영속성 컨텍스트의 내부 캐시(1차 캐시)에 저장- 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스와 같은 역할 - 조회한 엔티티만 영속석 컨텍스트가 관리 (임베디드 타입, 단순 필드는 X) || 장점 1차 캐시동일성 보장트랜잭션을 지원하는 쓰기 ..
| JPA(Java Persistence API) || JPA 요약 - 객체 모델과 관계형 데이터베이스 모델의 지향하는 패러다임 불일치를 해결- 반복되는 SQL 작성과 JDBC API 사용을 해결- SQL에 의존적인 개발을 해결 --> JPA는 엔티티 중심의 개발 (DB에 대한 처리는 JPA가)- 개발자는 데이터 중심인 관계형 데이터베이스를 사용해도 객체지향 애플리케이션 개발에 집중 - 자바 ORM 기술에 대한 API 표준 명세* ORM(Object-Relational Mapping): 객체와 관계형 데이터베이스를 매핑한다는 의미 (패러다임의 불일치 해결)- JPA는 애플리케이션과 JDBC 사이에서 동작 [애플리케이션 [JPA [JDBC API]]] [DB]- SQL을 개발자 대신 생성해서 DB에 전달-..