Spring/Spring Data JPA 27

[자바 ORM 표준 JPA 프로그래밍] 10-4. 객체지향 쿼리 언어: QueryDSL (1)

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. QueryDSLJava에서 쿼리를 생성할 수 있게 해주는 프레임워크 (오픈소스) 특징타입 안전자바 코드 O (문자열 기반 X)컴파일 시점에 타입 체크 동적 쿼리 생성Fluenct API (Method Chaining)직관적인 쿼리 작성 방식 (Readable) 다양한 지원SQL, JPA, MongoDB, Lucense 2. 시작Q Classmetadata (entity field)entity-based(plugin) querydsl-apt  JPAQuery (or JPAQueryFactory)type-safe querydynamicallypublic class UserRepositoryCustomImpl implemen..

[Spring Data JPA] 3-1. Defining Query Methods (2)

4. Repository Methods Returning Collections or IterablesUsing Streamable as Query Method Return Typeinterface PersonRepository extends Repository { Streamable findByFirstnameContaining(String firstname); Streamable findByLastnameContaining(String lastname);}Streamable result = repository.findByFirstnameContaining("av") .and(repository.findByLastnameContaining("ea"));Streamable비병렬 스트림을 접근할 수 있..

[Spring Data JPA] 3-1. Defining Query Methods (1)

1. Query Lookup Strategies@EnableJpaRepositories (queryLookupStrategy)CREATE_IF_NOT_FOUND (default)선언된 쿼리 -> 쿼리 생성 (메서드 이름 기반) CREATE쿼리 생성메서드 이름 기반 (접두사 제외) USE_DECLARED_QUERY선언된 쿼리를 찾으려 시도 (어노테이션)찾을 수 없으면 예외 발생 (부트스트랩 시점) 2. Query CreationQuery Builder MechanismJPQL Query Creation from method nameinterface PersonRepository extends Repository { // 여러 조건을 사용한 쿼리 List findByEmailAddressAndLastna..

[Spring Data JPA] 3-7. Repository query keywords

1. Supported query method subject keywordsfind…Byread…Byget…Byquery…Bysearch…Bystream…ByGeneral query method - can be used in combination with additional keywordsReturn type: the repository type- Collection, Streamable subtype, result wrapper (Page, GeoResults, store-specific)exists…ByExists projectionReturn type: booleancount…ByCount projectionReturn type: booleandelete…Byremove…ByDelete que..

[자바 ORM 표준 JPA 프로그래밍] 8. 프록시와 연관관계 관리

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 프록시엔티티를 조회할 때, 연관된 엔티티를 항상 사용하는 것은 아닙니다.모든 연관관계를 한꺼번에 가져오게 될 경우, 성능이 떨어질 수 있습니다. 지연 로딩엔티티가 실제 사용될 때, 데이터베이스 조회를 하는 방법입니다. 프록시 객체실제 엔티티 객체 대신에 가짜 엔티티 객체를 사용합니다. (DB 접근 위임)실제 클래스를 상속받아 만들어짐 (겉모양 같음)실제 객체의 참조를 보관하며, 프록시 객체의 메소드를 호출하면 실제 객체의 메소드를 호출 (데이터베이스 조회 지연 목적) em.getReference()Member member = em.getReference(Member.class, "id1");member.getName(..

[자바 ORM 표준 JPA 프로그래밍] 7. 고급 매핑

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 상속 관계 매핑데이터베이스의 슈퍼타입-서브타입 논리를 테이블로 구현 조인 전략엔티티 각각을 테이블로 생성 + 자식 테이블의 기본키를 기본키+외래키로 사용 (부모 테이블의 기본키 받기)테이블에 컬럼을 따로 추가해주기 (DTYPE: 구분 컬럼)테이블 정규화 O + 참조 무결성 제약 O (외래키)단점: 조회 쿼리 복잡 + 삽입 쿼리 두 번 실행 @Inheritance조인 전략 지정 (상속 매핑 시)부모 클래스에 작성 @DiscriminatorColumn구분 컬럼 지정 (부모클래스)자식 테이블 구분용@Entity@Inheritance(strategy = InheritanceType.JOINED)@DiscriminatorColu..

[자바 ORM 표준 JPA 프로그래밍] 6. 다양한 연관관계 매핑

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 다대일여러 개의 엔티티가 하나의 동일한 엔티티와 연관될 수 있는 관계 단방향 [N:1]@ManyToOne@JoinColumn(name=”TEAM_ID”)private Team team; 양방향 [N:1, 1:N]@ManyToOne@JoinColumn(name=”TEAM_ID”)private Team team;@OneToMany(mappedBy="team")private List members = new ArrayList();양방향은 외래 키가 있는 쪽이 연관관계의 주인입니다.양방향 연관관계는 항상 서로를 참조해야 합니다. 2. 일대다하나의 동일한 엔티티가 여러 개의 엔티티와 연관될 수 있는 관계 단방향 [1:N]@One..

[자바 ORM 표준 JPA 프로그래밍] 5. 연관관계 매핑 기초

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 단방향 연관관계객체 연관관계참조로 연관관계를 맺음. 단방향 관계한 객체가 다른 객체 참조 O (다른 객체가 반대 객체 참조 X)객체 그래프 탐색을 통해 연관관계 파악 가능 테이블 연관관계외래키로 연관관계를 맺습니다. 양방향 관계한 객체가 다른 객체 참조 O + 다른 객체가 반대 객체 참조 O연관관계인 모든 테이블이 조인 쿼리에 쓰임 연관 관계 매핑@JoinColumn외래키 설정 (조인 시 사용)name외래키 이름referencedColummnName외래키가 참조하는 컬럼명foreignKey외래키 제약조건 (테이블 생성시에만) @ManyToOne다대일 관계 매핑optional관련 엔티티 존재 유무truefetch페치 전략..