본문 바로가기
728x90
반응형

자바/JPA30

[JPA/Java] 페이징 API JPA는 페이징을 다음 두 API로 추상화하였다. (1) setFirstResult(int startPosition) :조회 시작 위치 ( 0 부터 시작 ) (2) setMaxResults(int maxResult) : 조회할 데이터 수 ex) //페이징 쿼리 String jpql = "select m from Member m order by m.name desc"; List resultList = em.createQuery(jpql, Member.class) .setFirstResult(10) .setMaxResults(20) .getResultList(); JpaMain.java for (int i = 0; i < 100; i++) { Member member = new Member(); member.. 2023. 5. 3.
[JPA/Java] JPQL Projection(프로젝션) JPQL 프로젝션은 SELECT 절에 조회할 대상을 지정하는 것을 의미한다. 프로젝션 대상에는 엔티티, 임베디드 타입, 스칼라 타입(숫자, 문자 등 기본 데이터 타입) 이 해당된다. 엔티티 프로젝션에는 쿼리로 표현하면 SELECT m FROM Member m SELECT m.team FROM Member m 이 있고, 이를 코드로 표현하면 List result = em.createQuery("select m from Member m", Member.class).getResultList(); List result = em.createQuery("select m.team from Member m join m.team t", Team.class).getResultList(); 와 같이 표현할 수 있다. 임베디.. 2023. 4. 28.
[JPA/Java] JPQL 기본 문법과 기능 JPQL은 객체지향 쿼리 언어이다. 테이블을 대상으로 쿼리하는 것이 아니라, 엔티티 객체를 대상으로 쿼리 한다. JPQL은 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. JPQL은 결국 SQL로 변환된다. 새로 프로젝트를 만들어서 JPQL 실습을 진행한다. 신규 프로젝트를 만들 때, pom.xml에 있는 Dependecies와 resources 하위에 있는 META-INF/persistence.xml을 그대로 가져와서 진행한다. 모델링은 아래와 같다. Member.java package jpql; import javax.persistence.*; @Entity public class Member { @Id @GeneratedValue private Long id; private Stri.. 2023. 4. 27.
[JPA/Java] 객체지향 쿼리 언어 종류 JPA는 다양한 쿼리 방법을 지원하고 있다. JPQL, JPA Criteria, QueryDSL, 네이티브 SQL 등등 이 중에서 JPQL과 QueryDSL을 현업에서 많이 사용한다고 한다. 이 외에도 JDBC API를 직접 사용하기도 하고, MyBatis와 SpringJdbcTemplate을 함께 사용하기도 한다. 먼저, JPQL에 대해서 알아보자. ※ JPQL JPQL은 가장 단순한 조회 방법이다. EntityManager.find()를 이용하거나, 객체 그래프 탐색(a.getB().getC()) 와 같은 형식으로 찾기도 한다. JPA를 사용하면 엔티티 객체 중심으로 개발이 가능한데, 문제는 검색쿼리를 사용할 때이다. 여기서 보통 쿼리로 조건을 줄때, WHERE 절을 사용하는데, 조건을 주고싶을 땐 .. 2023. 4. 27.
[JPA/Java] For property-based access both setter and getter should be present 문제 해결 @Access or @Column 임베디드 타입 변수를 사용하고자 할 때, Embedable 클래스에 응용 함수를 만들고자 할 때, getter를 사용하다보면 아래와 같은 상황이 발생한다. 이와 같은 이슈는 어떻게 해결할까? JPA 강사 김영한 님이 위의 이슈에 대한 질문에 대한 답을 남겨주었다. https://www.inflearn.com/questions/78106/embeddable-%EC%82%AC%EC%9A%A9%EC%8B%9C-%EC%A7%88%EB%AC%B8-%EC%9E%85%EB%8B%88%EB%8B%A4 @Embeddable 사용시 질문 입니다. - 인프런 | 질문 & 답변 안녕하세요 강사님 @Embeddable 어노테이션 관련 부분을 실습 하고 있는데요 @Getter@Setter@Embeddablepublic class.. 2023. 3. 13.
[JPA/Java] 값 타입 3 (값 타입 컬렉션) 값 타입 컬렉션은 하나 이상의 값을 넣을 때 사용한다. 기존에 있었던 테이블 Member에 Address가 있는데, 주소에 대한 이력관리와 좋아하는 음식 정보를 넣고 싶다는 가정을 하면, 기존에 있었던 Address를 사용하여 주소 이력을 관리하기에는 한계가 있다. 또 좋아하는 음식이 여러 개라면? 여러 가지 갚을 넣어야 할 때 컬렉션을 이용해야 한다. 대략적인 설계는 아래의 그림과 같다. 그래서 컬렉션 프레임워크인 Set, List를 사용하였다, 값 타입에 컬렉션을 사용하려면.. @ElementCollection, @CollectionTable을 사용하여야 한다. 데이터베이스는 컬렉션을 Member 테이블에 컬럼을 종속시켜 같은 테이블에 저장할 수 없다. 그래서 컬렉션을 저장하기 위한 별도의 테이블이 .. 2023. 3. 13.
728x90
반응형