분류 전체보기 83

Spring Data Jpa 공통 인터페이스 설정, 적용 및 분석

JavaConfig 설정 - 스프링 부트 사용시 생략 가능@Configuration@EnableJpaRepositories(vasePackages = "Repository 위치")public class AppConfig {}스프링 부트 사용시 @SpringBootApplication 위치를 지정(해당 패키지와 하위 패키지 인식)만약 위치가 달라지면 @EnableJpaRepositories 스프링 데이터 JPA가 구현 클래스 대신 생성org.springframework.data.repository.Repository를 구현한 클래스는 스캔 대상MemberRepository 인터페이스가 동작한 이유SpringDataJpa에서 인터페이스를 보고 구현체를 만들어서 주입시킴실체 출력해보기 (Proxy)meberR..

JPQL 중급 문법과 기능

경로 표현식.(점)을 찍어 객체 그래프를 탐색하는 것select m.username -> 상태 필드from Member m join m.team t -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드where t.name = '팀A'  경로 표현식 용어 정리상태 필드 (state field) : 단순히 값을 저장하기 위한 필드 (ex: m.username)연관 필드 (association field): 연관관계를 위한 필드단일 값 연관 필드:@ManyToOne, @OneToOne, 대상이 엔티티(ex: m.team)컬렉션 값 연관 필드:@OneToMany, @ManyToMany, 대상이 컬렉션(ex: m.orders) 경로 표현식 특징상태 필드(state field): ..

JPA 2024.09.04

JPQL 기본 문법과 기능

JPQL 문법select m from Member as m where m.age > 18엔티티와 속성은 대소문자 구분O (Member, age)JPQL 키워드는 대소문자 구분 X (SELECT, FROM, where)엔티티 이름 사용, 테이블 이름이 아님 (Member)별칭은 필수 (m) (as는 생략 가능) 집합과 정렬COUNT, SUM, AVG, MAX, MIN 등 가능GROUP BY, HAVING, ORDER BY 등 가능 TypeQuery, QueryTypeQuery: 반환 타입이 명확할 때 사용Query : 반환 타입이 명확하지 않을 때 사용TypeQuery(Member> query = em.createQuery("SELECT m FROM Member m", Member.class); ..

JPA 2024.09.03

JPA 쿼리 지원 방법

JPA는 다양한 쿼리 방법을 지원JPQLJPA CriteriaQueryDSLNative SQLJDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 JPQL (Java Persistence Query Language)JPA를 사용하면 엔티티 객체를 중심으로 개발검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색JPQL은 엔티티 객체를 대상으로 쿼리SQL은 데이터베이스 테이블을 대상으로 쿼리모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공SQL을 추상화해서 특정 데이터베이스 SQL에 의존 XSQL과 문법 유..

JPA 2024.09.03

값 타입

JPA의 데이터 타입 분류엔티티 타입@Entity로 정의하는 객체데이터가 변해도 식별자로 지속해서 추적 가능예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인지 가능값 타입int, Integer, String처럼 단순한 값으로 사용하는 자바 기본 타입이나 객체식별자가 없고, 값만 있으므로 변경시 추적 불가예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류기본값 타입자바 기본 타입(int, double)래퍼 클래스(Integer, Long)String임베디드 타입(embedded type, 복합 값 타입)컬렉션 값 타입(collection value type) 기본값 타입예): String name, int age생명 주기를 엔티티에 의존예) 회원을 삭제하면 이름, 나이 필..

JPA 2024.09.01

프록시와 연관관계 관리

프록시 기초em.find() vs em.getReference()em.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회em.getReference() : 데이터베이스 조회를 미루는 가짜 (프록시) 엔티티 객체 조회 프록시 객체의 초기화 프록시의 특징프록시 객체는 처음 사용할 때 한 번만 초기화프록시 객체를 초기화할 때, 프록시 객체가 실제 엔티티로 바뀌는 것은 아님, 초기화되면 프록시 객체를 통해서 실제 엔티티에 접근 가능프록시 객체는 원본 엔티티를 상속 받음, 따라서 타입 체크 시 주의해야 함 (== 비교 실패, 대신 instance of 사용)영속성 컨텍스트에 찾는 엔티티가 이미 있으면 em.getReference()를 호출해도 실제 엔티티 반환영속성 컨텍스트의 도움을 받을 수 없는 준영속..

JPA 2024.09.01

상속관계 매핑

상속 관계 매핑관계형 데이터베이스는 상속 관계 X슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사상속 관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 각각 테이블로 변환 -> 조인 전략통합 테이블로 변환 -> 단일 테이블 전략서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 주요 어노테이션@Inheritance(strategy=InheritanceType.XXX)JOINED : 조인 전략SINGLE_TABLE : 단일 테이블 전략TABLE_PER_CLASS : 구현 클래스마다 테이블 전략@DiscriminatorColumn(name=“DTYPE”)@DiscriminatorValue("XXX") 조인 전략..

JPA 2024.08.27

다양한 연관관계 매핑

연관 관계 매핑 시 고려사항 3가지다중성단방향, 양방향연관 관계의 주인 다중성다대일 : @ManyToOne일대다 : @OneToMany일대일 : @OneToOne다대다 : @ManyToMany 단방향, 양방향테이블외래 키 하나로 양쪽 조인 가능사실 방향이라는 개념이 없음객체참조용 필드가 있는 쪽으로만 참조 가능한쪽만 참조하면 단방향양쪽이 서로 참조하면 양방향 연관 관계의 주인테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음객체 양방향 관계는 참조가 2군데 있음, 둘 중 테이블의 외래 키를 관리할 곳을 지정해야 함 다대일 단방향 정리더보기가장 많이 사용하는 연관관계다대일의 반대는 일대다다대일 양방향 정리더보기외래 키가 있는 쪽이 연관 관계의 주인양쪽을 서로 참조하도록 개발 일대다 단방향 정리더보기일대다..

JPA 2024.08.26

연관관계 매핑 기초

객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다. 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다.객체는 참조를 사용해서 연관된 객체를 찾는다.테이블은 외래키, 객체는 참조더보기//팀 저장 Team team = new Team(); team.setName("TeamA"); em.persist(team); //회원 저장 Member member = new Member(); member.setName("member1"); // 외래키를 직접 다룸 member.setTeamId(team.getId()); em.persist(member); // 식별자로 다시 조회, 객체 지향적인 방법은 아님 //조회 Member findMember = em.find(Membe..

JPA 2024.08.26

기본키 매핑

기본 키 매핑 방법직접 할당 : @Id만 사용자동 생성(@GeneratedValue)IDENTITY : 데이터베이스에 위임, MYSQLIDENTITY만 persist 시점에 즉시 insert sql을 던짐SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용, ORACLE@SequenceGenerator 필요TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용@TableGenerator 필요AUTO : 방언에 따라 자동 지정(IDENTITY, SEQUENCE, TABLE 중 하나로 됨), 기본값  IDENTITY 전략 - 특징JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행AUTO_INCREMENT는 데이터베이스에 INSERT SQL을 실행한 이후에 ID 값을 알 수 있음IDENTITY 전..

JPA 2024.08.25