1. 페이징 APIsetFirstResult(int startPosition) : 조회 시작 위치 (0 부터 시작)setMaxResults(int maxResult): 조회할 데이터 수✅ 사용 예시 //페이징 API List result = em.createQuery("select m from Member m order by m.age desc", Member.class) .setFirstResult(10) .setMaxResults(20) .getResultList();이렇게 페이징API를 쓰면 10번 인덱스부터 20개의 결과를 받을 수 있다.JPQL을 사용하면 이렇게 페이징 처리가 편하다. 관계형 데이터베이스인 Oracle에서는 페이징처..
분류 전체보기
1. 프로젝션이란?- SELECT 절에 조회할 대상을 지정하는 것 2. 프로젝션 대상✔️엔티티, 임베디드 타입, 스칼라 타입(기본 데이터 타입) 관계형 데이터베이스는 테이블 내의 개별적인 값을 가지는 데이터들을 조회한다.예를 들어, Employees 테이블에 EmployeeID, Name, Age와 같은 속성에 있는 값을 조회하는 거다.프로젝션 대상이 스칼라 타입이라고 볼 수 있다. JPQL에서는 관계형 데이터베이스와 달리 조회 대상이 더 넓다. 3. 프로젝션 대상 이해하기 ✅ Member 엔티티 @Entity@Getter@Setterpublic class Member { @Id @GeneratedValue private Long id; private String username; ..
JPA 기본 | 객체지향 쿼리 언어 알아보기(JPQL, QueryDSL 등)1. JPQL1-1) JPQL이란?JPQL은 JPA에서 제공하는 객체지향 쿼리 언어 중 하나다.JPQL은 엔티티 객체를 대상으로 쿼리를 작성할 수 있게 해준다. 1-2) JPQL의 특징✔️ 객체지향 쿼리- 관계형 데이터베이스ururuwave.tistory.comJPQL이 무엇인지는 지난 포스팅에서 다뤘다. 1. 기본 문법1-1) JPQL은 엔티티 객체를 대상으로 쿼리를 작성한다. select m from Member as m where m.age > 18- 엔티티와 속성은 대소문자를 구분한다. (ex. Member, age)- JPQL 키워드는 대소문자를 구분하지 않는다.(ex.SELECT, FROM, where)- 별칭은 필수다..
1. JPQL1-1) JPQL이란?JPQL은 JPA에서 제공하는 객체지향 쿼리 언어 중 하나다.JPQL은 엔티티 객체를 대상으로 쿼리를 작성할 수 있게 해준다. 1-2) JPQL의 특징✔️ 객체지향 쿼리- 관계형 데이터베이스의 테이블이 아닌 엔티티 객체를 대상으로 쿼리를 작성할 수 있다.- 테이블과 컬럼 대신 엔티티 클래스와 필드를 참조한다. ✔️ 데이터베이스 독립성- 특정 데이터베이스에 종속되지 않고 독립적인 쿼리를 작성할 수 있다. -> JPQL은 SQL로 변환된다.- JPQL은 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. ✔️ 표준화- JPQL은 JPA 표준에 포함되어 있어서 다양한 JPA 구현체(Hibernate 등)에서 동일하게 사용할 수 있다. 1-3) JPQL의 한계점-..

1. 값 타입 컬렉션JPA에서 엔티티가 여러 개의 동일한 값 타입을 컬렉션으로 하나 이상 저장할 때 사용한다. 말이 좀 헷갈리니 바로 코드로 보자.✅값 타입 컬렉션 사용 예시@Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String username; @Embedded private Period workPeriod; @Embedded private Address homeAddress; @ElementCollection @CollectionTable(name = "FAVORITE_FOOD" , j..

1. 값 타입 공유💡임베디드 값 타입의 실제 인스턴스인 값을 공유하면 위험하다. 1-1) 실제 인스턴스인 값을 공유했을 때 ✅ Address(임베디드 값 타입)와 Member(엔티티) 코드@Embeddable @Getter @Setter public class Address { private String city; private String street; private String zipcode; public Address() { } public Address(String city, String street, String zipcode) { this.city = city; this.street = street; this.zipcode = zipcode; } } @Entity @Getter @Setter ..

1. 기본값 타입생명주기를 엔티티에 의존값 타입은 공유되지 않는다. (변경시 다른 값도 변경되면 안된다.)래퍼 클래스나 String같은 클래스는 공유가능한 객체지만 변경안됨.2. 임베디드 값 타입(복합 값 타입)재사용 가능한 값 타입 객체를 정의하여 엔티티의 일부분으로 포함시킨다. 2-1) 임베디드 값 타입 사용법✅임베디드 값 타입 사용 예시위 그림을 차근차근 설명해보자면,✔️ 멤버 엔티티는 이름, 근무 시작일(startDate), 근무 종료일(endDate), 주소 도시(city), 주소 번지(street), 주소 우편번호(zipcode)를 가진다.근무 시작일, 근무 종료일은 기간으로 묶을 수 있다. 주소 도시, 주소 번지, 주소 우편번호는 주소로 묶을 수 있다. ✔️ @Embeddable 애노테이션을..

1. 영속성 전이(CASCADE)특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속상태로 만든다.ex) 부모 엔티티를 저장할 때, 자식 엔티티도 함께 저장. 💡연관관계 매핑과 아무 관련이 없다. 연관된 엔티티를 함께 영속화하는 편리함만 제공할 뿐이다.💡연관된 엔티티가 다른 곳에서도 관리되는 엔티티라면 CASCADE를 쓰면 안된다. ✅코드 예시@Entity@Getter@Setterpublic class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent") private List childList = new ArrayList(); ..