목록JPA (10)
mojo's Blog
소개 ※ JPA 는 다양항 쿼리 방법을 지원한다. - JPQL - JPA Criteria - QueryDSL - 네이티브 SQL - JDBC API 를 직접 사용, MyBatis, SpringJdbcTemplate 를 함께 사용 ※ JPQL 가장 단순한 조회 방법 - EntityManager.find() - 객체 그래프 탐색 (ex : a.getB().getC()) 만약 나이가 18살 이상인 회원을 모두 검색하고 싶은 경우? 결국 문제는 검색 쿼리이다. 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색해야 한다. 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하다. 애플리케이션이 필요한 데이터만 DB 에서 불러오려면 결국 검색 조건이 포함된 SQL 이 필요하다. 따라서, JPA 는 SQ..
기본값 타입 ※ JPA 의 데이터 타입 분류 엔티티 타입 - @Entity로 정의하는 객체 - 데이터가 변해도 식별자로 지속해서 추적이 가능하다. (ex : 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능) 값 타입 - int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 - 식별자가 없고 값만 있으므로 변경시 추적 불가 (ex : 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체) ※ 값 타입 분류 기본값 타입 - 자바 기본 타입(int, double) - 래퍼 클래스(Integer, Long) - String 임베디드 타입(embedded type, 복합 값 타입) 컬렉션 값 타입(collection value type) ※ 기본값 타입 - 생..
프록시 Member 를 조회할 때 Team 도 함께 조회해야 할지에 대한 이슈가 있다. 아래의 코드를 보도록 하자. private static void printMember(Member member) { System.out.println("member = " + member.getUsername()); } private static void printMemberAndTeam(Member member) { String username = member.getUsername(); System.out.println("username = " + username); Team team = member.getTeam(); System.out.println("team = " + team.getName()); } 두 가지..
상속관계 매핑 관계형 데이터베이스는 상속 관계가 없다. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑이란 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법은 3가지다. 각각 테이블로 변환 : 조인 전략 통합 테이블로 변환 : 단일 테이블 전략 서브타입 테이블로 변환 : 구현 클래스마다 테이블 전략 ※ 주요 애너테이션 @Inheritance(strategy = InheritanceType.XXX) - JOINED : 조인 전략 - SINGLE_TABLE : 단일 테이블 전략 - TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name = "D..
※ 연관관계 매핑시 고려사항 3가지 - 다중성 - 단방향, 양방향 - 연관관계의 주인 ※ 다중성 - 다대일 : @ManyToOne - 일대다 : @OneToMany - 일대일 : @OneToOne - 다대다 : @ManyToMany (다대다는 실무에서 사용하지 않음) ※ 단방향, 양방향 테이블 - 외래키 하나로 양쪽 조인이 가능하다. - 사실 방향이라는 개념이 없다. 객체 - 참조용 필드가 있는 쪽으로만 참조가 가능하다. - 한쪽만 참조하면 단방향이다. - 양쪽이 서로 참조하면 양방향이다. ※ 연관관계의 주인 테이블은 외래키 하나로 두 테이블이 연관관계를 맺는다. 객체 양방향 관계는 A ~> B, B ~> A 처럼 참조가 2군데 있다. (둘중 테이블의 외래키를 관리할 곳 지정) 연관관계의 주인은 외래키를..
단방향 연관관계 ※ 목표 객체와 테이블 연관관계의 차이를 이해해야 한다. 객체의 참조와 테이블의 외래 키를 매핑해야 한다. 용어 이해 - 방향(Direction) : 단방향, 양방향 - 다중성(Multiplicity) : 다대일, 일대다, 일대일, 다대다 이해 - 연관관계의 주인(Owner) : 객체 양방향 연관관계는 관리 주인이 필요 ※ 객체를 테이블에 맞추어 모델링 예를 들어서 멤버와 팀이 다대일 관계일 때, 테이블 연관관계는 다음과 같다. 위 구조를 그대로 Member, Team 클래스를 생성한다면 다음과 같다. @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(na..