본문 바로가기

criteria8

JPA - 객체지향 쿼리 언어 - Criteria 메타 모델 API - 참조: 자바 ORM 표준 JPA 프로그래밍 - 메타모델 API 설정: https://docs.jboss.org/hibernate/orm/5.4/topical/html_single/metamodelgen/MetamodelGenerator.html - 메타 모델 API 객체 지향 쿼리언어에서 JPQL 과 Citeria 를 살펴보았다. select generatedAlias0 from Member as generatedAlias0 where generatedAlias0.age>=20 ...................... CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(Member.class); Root m =.. 2021. 8. 13.
JPA - 객체지향 쿼리 언어 - Criteria 파라미터, 네이티브 함수 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 파라미터 JPQL 에서 :username 으로 파라미터를 정의한것처럼 Criteria 에서도 해당 기능을 제공한다. CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(Member.class); Root m = cq.from(Member.class); cq.select(m) .where(cb.equal(m.get("name"), cb.parameter(String.class, "userNameParam"))); List members = em.createQuery(cq) .setParameter("userNameParam", "Name#4") .getResultLi.. 2021. 8. 12.
JPA - 객체지향 쿼리 언어 - Criteria 서브 쿼리 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 서브 쿼리 Criteria 로도 서브쿼리를 작성할 수 있다. 메인의 테이블과 연관된 서브쿼리와 메인의 테이블이 연관되지 않은 간단한 서브쿼리를 알아보도록 한다. - 간단한 서브쿼리 메인 테이블과 아무런 연관이 없는 간단한 서브쿼리부터 알아보도록 하자. 평균나이보다 나이가 많은 Member 엔티티만 조회해보자. JPQL 로 표현하면 "select m from Member m where m.age >= (select AVG(m2.age) from Member m2)" 과 같이 될 것이다. 데이터는 앞의 글에서 사용했던 아래 데이터를 이용한다. Member member1 = new Member(); member1.setName("Name#1"); member1.. 2021. 8. 11.
JPA - 객체지향 쿼리 언어 - Criteria 집합, 정렬, 조인 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 집합 Criteria 에서 집합(group by) 과 집합의 조건(having) 을 어떻게 사용하는지 예제를 통해 알아보자. group by 를 사용해보기 위해 기존 Member 엔티티에 age 속성을 더해주고, Address 를 함께 사용한다. Embedded 타입에 equals 와 hasCode 재정의 해 주는것도 잊지말자. @Entity public class Member extends DateMarkable{ @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private int age; private String name; @Embedded private Address addres.. 2021. 8. 9.
JPA - 객체지향 쿼리 언어 - Criteria 조회 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 조회(select & multiselect) Criteria 에서 SELECT 절을 만드는 함수는 아래와 같다. /** * The CriteriaQuery interface defines functionality that is specific * to top-level queries. * * @param the type of the defined result * * @since 2.0 */ public interface CriteriaQuery extends AbstractQuery { CriteriaQuery select(Selection... selections); CriteriaQuery multiselect(List 2021. 8. 8.
JPA - 객체지향 쿼리 언어 - Criteria 쿼리 생성 - 참조: 자바 ORM 표준 JPA 프로그래밍 - Criteria 쿼리 생성 Criteria 를 사용하려면 CriteriaBuilder.createQuery() 메소드로 Criteria 쿼리를 생성하면 된다. CriteriaBuilder 인터페이스의 메소드 시그니처는 아래와 같다. public interface CriteriaBuilder { /** * Create a CriteriaQuery object. * @return criteria query object */ CriteriaQuery createQuery(); /** * Create a CriteriaQuery object with the specified result * type. * @param resultClass type of the q.. 2021. 8. 5.
JPA - 객체지향 쿼리 언어 - Criteria - 참조: 자바 ORM 표준 JPA 프로그래밍 - Criteria Criteria 는 JPQL 의 작성을 도와주는 빌더 클래스이다. 문자열로 JPQL 을 작성하면 런타임이 되어야 문법 오류를 알 수 있지만 Criteria 는 자바 코드 기반이기 때문에 안전하게 JPQL 을 작성할 수 있다. 하지만 코드가 복잡해서 직관적으로 이해하기 힘들다는 의견도 있다. 대부분의 내용이 JPQL 과 중복되므로 사용법위주로 살펴보자. - Criteria 기초 Member member1 = new Member(); member1.setName("Name#1"); em.persist(member1); Member member2 = new Member(); member2.setName("Name#2"); em.persist(m.. 2021. 8. 4.
JPA - 객체지향 쿼리 언어 - 개요 - 참조: 자바 ORM 표준 JPA 프로그래밍 - Query DSL 공식 홈페이지: https://querydsl.com/ - Query DSL Release note: https://querydsl.com/releases - Query DSL 환경설정: https://www.baeldung.com/intro-to-querydsl - 개요 JPA 는 엔티티 객체를 조회할 수 있는 다양한 쿼리기술을 지원한다. JPQL, Criteria, QueryDSL 등 JPA 를 배우지 못하다가 이렇게 책으로라도 배워야겠다고 마음먹은 사람들이라면 한번쯤 들어봤을 법한 단어들이 바로 엔티티 객체를 조회하는 쿼리기술들이다. 위와 같이 화려한 단어들 중 가장 중요한것은 JPQL 이다. Criteria 나 QueryDSL 도.. 2021. 7. 28.