본문 바로가기
728x90
반응형

자바51

[JPA/Java] JPQL 조인(Join) JPQL을 이용하여 조인을 할 수 있다. 내부 조인[INNER JOIN] SELECT m FROM Member m [INNER] JOIN m.team t 외부 조인[OUTER JOIN] SELECT m FROM Member m LEFT [OUTER] JOIN m.team t 세타 조인 SELECT COUNT(m) FROM Member m, Team t WHERE m.username = t.name JPQL에도 ON 절을 이용할 수 있다. ON 절을 활용한 조인은 JPA 2.1부터 지원되는데, ON 절을 활용한 조인은 1) 조인 대상을 필터링할 때 2) 연관관계가 없는 엔티티를 외부 조인(OUTER JOIN)할 때 인데, 연관관계가 없는 엔티티를 외부 조인할 때는 하이버네이트 5.1부터 사용 가능하다. 1.. 2023. 5. 9.
[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.
728x90
반응형