JPA/JPA Basic

객체지향 쿼리 언어2 1. JPQL- 경로 표현식 .(점)을 찍어 객체 그래프를 탐색 하는 것 m.username -> 상태 필드 m.team -> 단일 값 연관 필드 m.orders -> 컬렉션 값 연관 필드 1) 용어 정리 상태필드: 단순히 값을 저장하기 위한 경로 탐색의 끝 탐색 x 연관필드: 연관관계를 위한 필드 단일 값 연관 필드: @ManyToOne, @OneToOne, 대상이 엔티티 묵시적 내부 조인(inner join) 발생, 탐색o 컬렉션 값 연관 필드: @OneToMany, @ManyToMany, 대상이 컬렉션 묵지석 내부 조인 발생, 탐색 x From 절에서 명시적 조인을 통해 별칭을 얻으면 별칭을 통해 탐색 가능 2) 명시적 조인, 묵시적 조인 명시적 조인: join 키워드 직접 사..
객체지향 쿼리 언어1 목차 객체지향 쿼리 언어 소개 JPQL 기본 문법과 기능 페치 조인 경로 표현식 다현성 쿼리 엔티티 직접 사용 Named 쿼리 벌크 연산 1. 객체지향 쿼리 언어 소개 1) JPA 가 지원하는 쿼리 방법 JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용, MyBatis, SpringJdbTemplate 함께 사용 2) JPQL //검색 String jpql = "select m From Member m where m.name like ‘%hello%'"; List result = em.createQuery(jpql, Member.class) .getResultList(); 테이블이 아닌 객체를 대상으로 하는 객체 지향 쿼리 SQL과 문..
값 타입 목차 기본값 타입 임베디드 타입(복합 값 타입) 값 타입과 불변 객체 값 타입의 비교 값 타입 컬렉션 정리 1. 기본값 타입 JPA 데이터 타입 분류 엔티티 타입 @Entity로 정의된 객체 데이터가 변해도 식별자로 추적 가능 회원 엔티티의 키나 나이 값을 변경해도 식별자로 추적 가능 값 타입 int, Integerm String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없음. 값 변경시 추적 불가 숫자 100을 200으로 변경시 완전히 다른 값으로 대체됨. 값 타입 분류 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입 컬렉션 값 타입 기본값 타입 String name, int age 생명주기를 엔티티에 ..
프록시와 연관관계 관리 목차 프록시 즉시 로딩과 지연로딩 지연 로딩 활용 영속성 전이: CASCADE 고아 객체 영속성 전이 + 고아 객체, 생명주기 1. 프록시 Member와 Team 객체가 있다. Member와 Team 은 다대일 양방향 관계이다. em.find(Member.Class(), member.getId()); 을 실행하면 Member객체와 Team 객체를 한번에 가져온다. Member와 Team을 거의 같이 사용한다면 문제가 되지 않지만, Member객체만 필요한 상황에서 Team 객체까지 Join하여 가져오는 것은 낭비 프록시 기초 em.find() VS em.getReference() em.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference(): 데이..
고급 매핑 1. 상속관계 매핑 관계형 DB에서는 상속 관계x 슈퍼타입 서브 타입 관계라는 모델링 기법이 객체 상속과 유사 상속관계 매핑: 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 슈퍼타입 서브타입 모델을 실제 물리 모델로 구현하는 법 각각 테이블로 변환 -> 조인 전략 통합 테이블로 변환 -> 단일 테이블 전략 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) JOINED: 조인 전략 SINGLE_TABLE: 단일 테이블 전략 TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name=“DTYPE”) @DiscriminatorValue(“XXX..
다양한 연관관계 매핑 1. 연관관계 매핑시 고려사항 3가지 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany 단방향, 양방향 연관관계의 주인(양방향일때) 2. 다대일 다대일 단방향 가장 많이 사용하는 연관관계 다대일의 반대는 일대다 다대일 양방향 외래키가 있는 쪽이 연관관계의 주인 양쪽을 서로 참조하도록 개발 3. 일대다 일대다 단방향 일대다 단방향은 일이 연관관계의 주인 테이블에서 일대다 관계는 항상 다 쪽에 외래키가 있음 객체와 테이블의 차이로 반대편 테이블의 외래키를 관리하는 특이한 구조 @JoinColumn을 꼭 사용해야 함. 그렇지 않으면 조인 테이블 방식을 사용함(중간에 테이블을 하나 추가함) 단점 엔티티가 관리하는 외래키..
JPA @JoinColumn @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name="member_id") private Long id; @OneToMany(mappedBy = "member") private List orders = new ArrayList(); } @Entity @Table(name="orders") @Getter @Setter public class Order { @Id @GeneratedValue @Column(name="order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="member_id") privat..
Entity, DTO, DAO, VO 1. Entity DB 테이블과 매핑되는 클래스 2. DAO(Data Access Object) DB를 사용해 데이터를 조회하거나 조작하는 기능을 하는 오브젝트 서비스와 DB사이에서 데이터를 옮기는 역할 -> 즉, 쿼리를 날려 데이터를 가져오거나 저장 DB에 로그인, 입력, 받아오기, 수정, 삭제 등의 작업들을 정의한 클래스 JPA Repository객체들이 일반적으로 DAO 역할을 함 3. DTO(Data Transfer Object) 계층간 데이터 교환을 위한 객체 DB에서 얻은 데이터를 Controller나 Service 로직에서 사용하기 위한 객체 로직 없이 데이터와 getter, setter만 존재 Request, response용 DTO: View를 위한 ..
h2DB를 띄워놓고 코드를 실행하는 와중에 에러)SQL Error 23505가 발생하는 문제가 생겼다. 찾아보니 h2버전과 하이버네이트(JPA) 버전 호환 관련해서 생긴 문제인것 같다. h2 1.4.200버전을 사용하면 하이버네이트 버전을 5.4.13.Final로 변경해주어야 한다. 해당 오류가 발생한 분들은 pom.xml파일에서 하이버네이트 버전을 변경해야 한다. 하이버네이트의 버전을 번경하기 싫다면 h2 버전을 1.4.199로 낮춰도 정상작동 한다.
연관관계 매핑 기초 1. 목표 객체와 테이블 연관관계의 차이를 이해 객체의 참조와 테이블의 외래 키를 매핑 2. 연관관계가 필요한 이유 객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다. -조영호(객체지향의 사실과 오해)- 예를 들어 member와 team이 있다고 가정 하나의 member는 하나의 team에 소속될 수 있고 하나의 team에는 여러 member가 소속될 수 있다.(다대일 관계) 객체를 테이블에 맞추는 모델링 참조 대신 외래 키 식별자를 직접 다룸 참조객체를 찾기 위해서는 member객체를 찾고 team의 식별자로 다시 조회 해야 한다.(즉 select문이 2번 발생) 객체를 테이블에 맞추어 모델링하면 협력관계를 만들수 없음. 테이블은 외래 키로 조인을 사용하여 연관된..
코드 미식가
'JPA/JPA Basic' 카테고리의 글 목록