전체 글
객체지향 쿼리 언어(JPQL)
JPQL은 양이 많아서 나눠 포스팅 합니다. 이 글에서는 JPQL 챕터까지 다룹니다. 이후 내용은 링크로 연동하여 포스팅하겠습니다. 목차 객체지향 쿼리 언어 소개 JPQL 기본 문법과 기능 페치(fetch) 조인 경로 표현식 다형성 쿼리 엔티티 직접 사용 Named 쿼리 벌크 연산 객체지향 쿼리 언어 소개 JPA는 다양한 쿼리 방법을 지원 JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용, Mybatis, SpringJdbcTemplate 함께 사용 JPQL 소개 가장 단순한 조회 방법 EntityManager.find() 객체 그래프 탐색(a.getB().getC()) 나이가 18살 이상인 회원을 모두 검색하고 싶다면? JPQL JPA를 사용하면 엔티티 객체를 ..
값 타입
기본값 타입 더보기 JPA의 데이터 타입 분류 JPA에서 데이터타입은 최상위 레벨에서 크게 두 분류로 나뉜다. 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입(embedded type, 복합 값 타입) 컬렉션 값 타입(collection value type) 기본값 ..
프록시와 연관관계 관리
프록시 더보기 Member를 조회할 때 Team도 함께 조회해야 할까? Member를 조회할 때 Team도 함께 조회해야 할까? 회원과 팀 함께 출력 private static void printMemberAndTeam(String memberId) { Member member = em.find(Member.class, memberId) Team team = member.getTeam(); System.out.println("username = " + member.getUsername); System.out.println("team = " + team.getName()); } 회원만 출력 private static void printMemberAndTeam(String memberId) { Member ..
고급 매핑
상속관계 매핑 더보기 관계형 데이터베이스는 상속 관계 X 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 각각 테이블로 변환 -> 조인 전략 통합 테이블로 변환 -> 단일 테이블 전략 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 주요 어노테이션 @Inheritance(starategy=InheritanceType.XXX) JOINED: 조인 전략 SINGLE_TABLE: 단일 테이블 전략 TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name="DTYPE") (default column name ..
생성자 주입을 사용해야 하는 이유
https://programforlife.tistory.com/111 [Spring] 생성자 주입을 사용해야 하는 이유 인턴을 시작한 초기 단계에, Spring 프로젝트 코드 분석을 하다가 신기한 점을 발견해서 질문을 한 기억이 있습니다. Spring프로젝트에서 Controller를 작성할 때, 저는 항상 @Autowired 어노테이션을 사 programforlife.tistory.com spring에서 필드 주입을 통한 DI가 아닌 생성자를 통한 DI를 해야 하는 이유와 순환 참조에 대해 다룬 글인데 괜찮아서 링크 남겨놓기!
다양한 연관관계 매핑
연관관계 매핑시 고려사항 3가지 다중성 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany (실무에서 쓰면 안됌 -> 대체 방법 추후에 서술) 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A -> B, B -> A 처럼 참조가 2군데 객체 양방향 관계는 참조가 2군데 있음. 둘중 테이블의 외래 키를 관리할 곳을 지정해야함 연관관계의 주인 : 외래 키를 관리하는 참조 주인의 반대편 : 외래 키에 영향을 주지 않음. 단..