Peony의 기록 창고 🌼
article thumbnail
[JPA] JPQL 중급 문법
SpringBoot/JPA 기본 2023. 7. 6. 22:37

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

article thumbnail
[JPA] 객체지향 쿼리 언어1 - 기본 문법
SpringBoot/JPA 기본 2023. 6. 9. 01:41

JPQL 소개 JPQL은 객체지향 쿼리 언어다. → 테이블을 대상으로 쿼리하는 것이 아닌, 엔티티 객체를 대상으로 쿼리 한다. 예시 비교 모델 Member 엔티티 @Entity public class Member { @Id @GeneratedValue private Long id; private String userName; private int age; ​ @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; } Team 엔티티 @Entity public class Team { @Id @GeneratedValue private Long id; private String name; ​ @OneToMany(mappedBy = "team") private..

[JPA] 다양한 쿼리 방법 소개
SpringBoot/JPA 기본 2023. 5. 16. 01:13

JPA는 다양한 쿼리 방법을 지원한다. JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 다양한 쿼리 방법 맛보기 우리가 배운 것 중에 가장 간단한 조회 방법은 EnfifyManager.find() 를 한 뒤, 객체 그래프를 탐색하는 방법이었다. (a.getB().getC()) 이때, 만약 나이가 18살 이상인 회원을 모두 검색하고 싶다면? JPQL을 사용해보자. JPA의 문제점 JPA를 사용하면 엔티티 객체를 중심으로 개발 문제는 검색 쿼리 : 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색해야 한다. 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하다. → 애플리케이션이 필요한 ..

article thumbnail
[JPA] 값 타입
SpringBoot/JPA 기본 2023. 5. 8. 00:55

1. 기본 값 타입 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능. 예) 회원 entity의 키 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자 X → 변경시 추적 불가 값 타입 분류 기본 값 타입 : 자바 기본 타입, 래퍼 클래스(Integer, Long), String 임베디드 타입 : 복합 값 타입 컬렉션 값 타입 기본 값 타입 생명주기를 엔티티에 의존 : 회원 삭제 -> 그 안의 필드도 같이 삭제 값 타입은 공유 ❌ 📌Note : 자바의 기본 타입은 절대 공유 불가능 int, double 같은 primitive type은 공유가 불가능하다..

article thumbnail
[JPA] 프록시와 연관 관계
SpringBoot/JPA 기본 2022. 12. 23. 02:40

프록시 ❓Member를 조회할 때 Team도 함께 조회해야 할까? package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntit..

article thumbnail
[JPA] 고급 매핑
SpringBoot/JPA 기본 2022. 7. 2. 15:40

상속관계 매핑 관계형 데이터베이스는 상속 관계가 없다. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑이란 객체의 상속과 DB의 슈퍼타입-서브타입 관계를 매핑하는 것을 의미한다. : 조인전략(각각 테이블로 변환), 단일 테이블 전략, 구현 클래스마다 테이블 전략(서브타입 테이블로 변환) 기법이 있다. Album, Movie, Book은 모두id, name, price를 가지고 있다(공통 변수) 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) JOINED : 조인 전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name="DTYPE"..

article thumbnail
[JPA] 다양한 연관관계 매핑
SpringBoot/JPA 기본 2022. 6. 28. 20:50

연관관계 매핑 시 고려사항 다중성 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 즉, 방향의 개념이 없다. 객체 참조용 필드가 있는 쪽으로만 참조 가능 (단방향) 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향(객체 입장 : 단방향을 2개) 연관관계 주인 외래 키를 관리하는 곳을 연관관계 주인으로 관리하자. 주인의 반대편은 단순 조회만 가능하도록 설계하는 것이 바람직하다. 다대일 [N:1] 다대일(N:1) 단방향 ERD 가장 많이 사용하는 연관관계이다. 다대일의 반대 → 일대다 다대일 양방향 ERD 외래 키가 있는 쪽이 연관관계의 주인이다. 양쪽을 서로 참조하도록 개발한다..

article thumbnail
[JPA] 연관 관계 매핑 기초
SpringBoot/JPA 기본 2022. 6. 28. 01:24

단방향 연관관계 목표 객체와 테이블 연관관계의 차이를 이해해야 한다. 객체의 참조와 테이블의 외래 키를 어떻게 매핑하는지에 대해 이해한다. 용어 이해 방향(Direction): 단방향, 양방향 다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 이해 연관관계의 주인(Owner): 객체 양방향 연관관계는 관리가 필요 연관관계가 필요한 이유 : 객체지향 설계의 목표는 자율적인 객체들의 협력 공통체를 만드는 것이다. 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원(N)과 팀(1)은 다대일 관계이다. 객체를 테이블에 맞추어 모델링 객체를 테이블에 맞추어 모델링 코드 @Entity public class Member { @Id @G..

[JPA] 엔티티 매핑
SpringBoot/JPA 기본 2022. 6. 26. 20:30

객체와 테이블 매핑 엔티티 매핑 소개 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne,@JoinColumn @Entity @Entity가 붙은 클래스는 JPA가 관리하는 클래스로 엔티티라고 부른다. JPA를 사용해서 테이블과 매핑할 클래스는 반드시 @Entity 필수! 주의사항 기본 생성자 필수 (파라미터가 없는 public 또는 protected) final 클래스, enum, interface, inner 클래스 사용할 수 없다. 저장할 필드에 final 키워드를 사용할 수 없다. 속성 name JPA에서 사용할 엔티티 이름 지정. 기본값 : 클래스 이름을 그대로 사용(예: Member) 같은 클래스..

article thumbnail
[JPA] 영속성 컨텍스트
SpringBoot/JPA 기본 2022. 6. 23. 20:48

JPA 에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기 (Object Relational Mapping) 영속성 컨텍스트 JPA를 보통 쓰게되면, 엔티티 매니저 팩토리와 엔티티 매니저에 대해 이해를 해야한다. 예를 들면, 고객의 요청이 올 때마다 엔티티 팩토리를 통해 엔티티 매니저를 생성한다. 엔티티 매니저는 내부적으로 데이터 커넥션을 사용해서 데이터베이스를 사용하게 된다. ❓그럼 영속성 컨텍스트란 뭘까? 영속성 컨텍스트란? 엔티티를 영구 저장하는 환경 EntityManager.persist(entity); : DB에 저장한다기보다 영속성 컨텍스트를 통해 엔티티를 영속화 한다는 의미이다. → 영속성 컨텍스트에 엔티티를 저장한다. 영속성 컨텍스트는 논리적인 개념이고, 눈에 보이지 않는다. 엔티..