[JPA] JPQL 중급 문법 - 객체지향 쿼리 언어 JPQL (2)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 경로 표현식JPQL에서는 점(.)을 사용하여 객체의 값에 접근할 수 있다. 이처럼 점(.)을 이용해 객체 그래프를 탐색하는 것을 경로 표현식이라고 한다.select m.username //상태 필드from Member m join m.team t //단일 값 연관 필드 join m.orders o //컬렉션 값 연관 필드where t.name = '팀A'🔽 경로 표현식 종류상태필드(state field): 단순히 값을 저장하기 위한 필드 (예: m.username)연관필드(association field): 연관관계를 위한 필드단일 값 연관 필드: 객체 간의 단일 연관 관계를 나타내는 ..
[JPA] JPQL 기본 문법 - 객체지향 쿼리 언어 JPQL (1)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ JPQL이란?JPQL(Java Persistence Query Language): 엔티티 객체를 조회하기 위해 설계된 객체 지향 쿼리 언어 ▶ 특징JPQL은 데이터베이스의 테이블이 아닌 엔티티 객체를 대상으로 하는 쿼리 언어이다.SQL을 추상화했기 때문에 특정 데이터베이스 시스템에 의존하지 않는다.SQL과 유사한 문법을 가지며, JPQL은 내부적으로 SQL로 변환되어 실행된다. ▶ 기본 문법select_문 ::=        select_절        from_절        [where_절]        [groupby_절]        [having_절]        ..
[JPA] 값 타입 컬렉션 - 값 타입 (4)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 값 타입 컬렉션값 타입을 하나 이상 저장할 때 List나 Set과 같은 Collection을 사용한다. 하지만 DB에는 Collection을 하나의 테이블에 저장할 수 없기 때문에 Collection을 저장하기 위한 별도의 테이블이 필요하다.방법: @ElementCollection, @CollectionTable🔽 값 타입 컬렉션 코드 @Entity public class Member { ... //값 타입 컬렉션 @ElementCollection @CollectionTable(name = "ADDRESS", joinColumns = @JoinCol..
[JPA] 값 타입 비교 - 값 타입 (3)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 값 타입의 비교자바가 제공하는 객체 비교는 동일성 비교, 동등성 비교 2가지가 있다. 1️⃣ 동일성(identity) 비교인스턴스의 참조 값을 비교한다. == 사용해서 비교하는 방법이다. 2️⃣ 동등성(equivalence) 비교인스턴스의 값을 비교한다. equals() 사용해서 비교하는 방법이다. ▶ 값 타입의 동등성, 동일성Address a = new Address("서울시", "종로구", "1번지");Address b = new Address("서울시", "종로구", "1번지");Address 값 타입을 a == b로 동일성 비교하면 둘은 서로 다른 인스턴스이므로 결과는 거짓이다.하지만 이것은 기대하는 결과가..
[JPA] 값 타입과 불변 객체 - 값 타입 (2)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 값 타입과 불변 객체▶ 문제: 값 타입 공유 참조임베디드 타입 같은 값 타입을 여러 Entity에서 공유하면 위험하다.Embedded 타입 같이 직접 정의한 값 타입은 객체 타입이기 때문에 값을 대입하면 참조 값이 공유된다.🔽 값 타입 공유 참조 문제 발생 코드Address address = new Address("city", "street", "zipcode");member1.setAddress(address);member2.setAddress(member1.getAddress()); //회원1의 address 값을 공유위 코드는 회원1이나 회원2가 이후 주소를 변경하면 함께 변경되기 때문에 문제가 생긴다. ▶..
[JPA] 기본값 타입과 임베디드 타입 - 값 타입 (1)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ JPA의 데이터 타입JPA의 데이터 타입을 크게 2가지로 나누면 엔티티 타입과 값 타입으로 나눌 수 있다.엔티티 타입@Entity로 정의하는 객체데이터가 변해도 식별자로 지속해서 추적이 가능하다.예: Member Entity의 키나 나이 값을 변경해도 식별자로 인식 가능하다.값 타입int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체식별자가 없고 값만 있으므로 변경 시 추적이 불가능하다.예: 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체된다.엔티티 타입의 특징값 타입의 특징식별자 O생명 주기 관리공유식별자X생명 주기를 엔티티에 의존공유하지 않는 것이 안전(복사해서 사..
[JPA] 영속성 전이(CASCADE)와 고아 객체
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 영속성 전이: CASCADE영속성 전이(transitive persistence): 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용한다.설정 방법: @OneToMany(mappedBy = "", cascade = CascadeType.PERSIST)예: 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장할 때 ▶ 영속성 전이: 저장🔽 영속성 전이 설정 코드@Entitypublic class Parent { @Id @GeneratedValue private Long id; //영속성 전이, CASCADE 옵션 적용 @OneToMany(mappedBy =..
[JPA] 즉시 로딩과 지연 로딩
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 즉시 로딩과 지연 로딩기능을 구현할 때 DB에서 가져오고 싶은 정보의 범위가 비즈니스 로직에 따라 다르다. 예를 들어, Member와 Team이라는 두 개의 entity가 연관 관계에 있을 때, 구현 목적에 따라 두 개의 데이터가 한 번에 조회되는 것이 좋을 수도 있고, 그렇지 않을 수도 있다. 이러한 상황을 JPA가 프록시와 지연 로딩을 통해 해결한다. 이전 글에서 프록시에 대해 알아보았고, 이 글에서는 지연 로딩에 대해 알아보겠다.JPA는 개발자가 연관된 Entity의 조회 시점을 선택할 수 있도록 다음 두 가지 방법을 제공한다.즉시 로딩지연 로딩  ✅ 즉시 로딩 (EAGER LOADING)Entity를 조회할..
soeun2537
'Programming/JPA' 카테고리의 글 목록