분류 전체보기333 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. 객체지향의 사실과 오해 - 객체란 무엇인가 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - 엘리스와 객체지향의 공통점 저자는 객체지향을 설명하기 위해 이상한 나라의 앨리스 이야기를 예시로 들고 있다. 사실 나는 이상한 나라의 앨리스를 읽어보진 않았지만 그래도 이해하는데 전혀 무리가 없도록 자세히 설명해주고 있다. 엘리스는 아름다운 정원으로 들어가기 위해 많은 노력을 한다. 그 과정에서 음식을 먹거나 부채질을 하면 키가 변하는 이상현상을 겪게 된다. 그리고 이를 이용해 키를 변화시키면서 목표했던 아름다운 정원에 들어가게 된다. 엘리스의 키나 현재위치는 상태라고 볼 수 있다. 엘리스의 상태가 변하는것은 케이크를 먹거나 부채질을 하는 등의 행동을 했기 때문이다. 또한 현재 상태에 따.. 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. 객체지향의 사실과 오해 - 협력하는 객체들 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - God Object: https://en.wikipedia.org/wiki/God_object - 개요 개발자나 설계자는 실세계의 사물이나 상황을 소프트웨어로 구현하고 사물의 속성과 행동을 클래스의 속성과 메소드로 구현하는것이 "객체지향적"이라고 생각하지만 실상은 소프트웨어와 실세계 사물간의 거리가 먼 것이 일반적이다. 그렇다면 컴퓨터공학을 전공하면서 지겹도록 듣던 붕어빵틀과 붕어빵은 도대체 뭘까? 엄청나게 똑똑해서 박사과정을 수료 하고 전공서적을 쓴 사람들은 헛소리를 한 것일까? 그것은 실세계의 모방이라는 관점으로 설명하는것이 객체 지향의 첫 발을 들여놓는 입문자들에게 객체 지향의 개념.. 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 - 객체지향 쿼리 언어 - JPQL NamedQuery - 참조: 자바 ORM 표준 JPA 프로그래밍 - Named Query 여태까지는 JPQL 예제를 작성하면서 String 변수에 JPQL 을 완성하여 수행하였다. 이를 동적 쿼리라고 한다. Mybatis 를 사용해본 경험이 있다면 보통 XML 에 특정 Query 를 선언해놓고 맵핑되는 파라미터만 변경하여 사용해본적이 있을 것이다. 이를 정적 쿼리 라고 한다. JPQL 도 XML 이나 어노테이션으로 정적 쿼리를 미리 작성해놓을 수 있다. NamedQuery 는 어플리케이션 로딩 시점에 미리 JPQL 문법을 체크하여 파싱한다. 오류 파악도 용이하며 미리 파싱한 결과를 재사용하여 성능상 이점도 있다. NamedQuery 는 @NamedQuery 어노테이션에 작성하는 방식과 XML 에 작성하는 2 가지 방식이 .. 2021. 8. 3. JPA - 객체지향 쿼리 언어 - JPQL 다형성 쿼리 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 다형성 쿼리 앞에서 JPA 상속관계 맵핑을 배운적이 있다. Item 엔티티를 확장하여 Book, Album, Movie 엔티티를 선언하였다. Single Table 전략으로 선언했던 Item 과 Book 엔티티의 코드를 다시 한번 살펴보자. @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "ITEM_TYPE") public abstract class Item extends DateMarkable { @Id @GeneratedValue @Column(name = "ITEM_ID") private Long id; private String name.. 2021. 8. 3. JPA - 객체지향 쿼리 언어 - JPQL 서브쿼리, 조건식 - 참조: 자바 ORM 표준 JPA 프로그래밍 - JPQL: https://docs.oracle.com/html/E13946_04/ejb3_langref.html - 서브 쿼리 JPQL 도 SQL 처럼 서브 쿼리를 지원한다. 다만 SQL 처럼 SELECT, FROM, WHERE, HAVING 절에 쓸 수 있는것은 아니고 WHERE 와 HAVING 절에서만 쓸 수 있다. 하이버네이트 HQL 은 SELECT 절의 서브쿼리를 허용하며 일부 JPA 구현체는 FROM 절의 서브쿼리도 지원하므로 자신이 사용할 구현체의 스펙을 잘 알아보고 사용하도록 하자. SQL 의 기본적인 문법은 다루지 않는다. JPQL 의 특성을 이용한 문법을 사용해보자. Member member = new Member(); member.set.. 2021. 8. 3. 이전 1 ··· 15 16 17 18 19 20 21 ··· 34 다음