목록자바 (64)
개발자꿈나무

JPA는 페이징 처리를 해주는 API를 2가지로 추상화했다. setFirstResult(int startPosition) : 조회 시작 위치(0부터 시작) setMaxResults(int maxResult) : 조회할 데이터 수 for (int i = 1; i
★ 프로젝션 - SELECT 절에 조회할 대상을 지정하는 것 [SELECT {프로젝션 대상} FROM] ⭐︎ 프로젝션 대상 엔티티 프로젝션 SELECT m FROM Member m; SELECT m.team FROM Member m; * 조회한 엔티티는 영속성 컨텍스트에서 관리됨 임베디드 타입 프로젝션 SELECT a FROM Address a; 이는 잘못된 쿼리이다. Address라는 엔티티는 존재하지 않으므로 조회의 시작점으로 임베디드 타입으로 잡을 수 없다. List addresses = em.createQuery("select o.address from Order o", Address.class) .getResultList(); 이처럼 Order 엔티티를 시작점으로 잡아서 임베디드 타입을 조회할 ..
★ JPQL 소개 - JPQL은 테이블을 대상으로 쿼리하는 것이 아니라 엔티티를 대상으로 쿼리하는 객체 지향 쿼리이다. - JPQL은 SQL을 추상화해서 특정데이터베이스의 SQL에 의존하지 않는다. - JPQL은 결국 SQL로 변환된다. ★ JPQL 기본 문법 기본적인 ANSI 표준 SQL은 전부 다 지원한다고 보면 된다. 문법 순서도 유사하다. select문 = select절 from절 [where절] [groupby절] [having절] [orderby절] update문 = update절 [where절] delete문 = delete문 [where절] - 엔티티와 속성은 대소문자를 구분한다. - JPQL 키워드는 대소문자를 구분하지 않는다. (select, from ...) - 엔티티 이름을 사용하며..
★ JPA가 지원하는 다양한 쿼리 방법 JPQL - 공식 지원 기능 JPA Criteria - 공식 지원 기능 QueryDSL - 비표준 오픈소스 프레임워크 Native DSL - 공식 지원 기능 JDBC API 직접 사용, Mybatis, SpringJdbcTemplate과 함께 사용 ★ JPQL 소개 - 엔티티 객체를 조회하는 객체지향 쿼리 - 문법은 ansi 표준 SQL과 유사하게 지원 - SQL을 추상화해서 특정 데이터베이스에 의존하지 않음 //기본 JPQL String jpql = "select m from Member as m where m.age >= 30"; //m.name은 컬럼명이 아니라 필드명 List resultList = em.createQuery(jpql, Member.class..

자바의 컬렉션처럼 값 타입도 컬렉션을 사용할 수 있다. 회원의 좋아하는 음식들과 이전 주소 이력을 저장하고자 한다면 Set과 List를 이용해서 저장할 수 있다. 단, 테이블에는 컬렉션 타입이 들어갈 수 없으므로 별도의 컬렉션 테이블을 만들어서 관리해야 한다. //주소 이력 @ElementCollection @CollectionTable(name = "ADDRESS", joinColumns = @JoinColumn(name = "MEMBER_ID")) private List addressHistory = new ArrayList(); //좋아하는 음식 @ElementCollection @CollectionTable(name = "FAVORITE_FOOD", joinColumns = @JoinColumn(..

값 타입이라는 건 복잡한 객체 세상을 조금이라도 단순화하기 위해 만들어진 개념으로 단순하고 안전하게 부작용 없이 사용할 수 있어야 한다. ★ 값 타입 공유 참조 - 임베디드 값 타입처럼 값 타입을 여러 엔티티에서 공유하면 부작용이 발생할 수 있다. Address address = new Address("seoul", "street", "1000"); Member member1 = new Member(); member1.setName("member1"); member1.setHomeAddress(address); em.persist(member1); Member member2 = new Member(); member2.setName("member2"); member2.setHomeAddress(addres..