JPA9 [JPA] 객체지향 쿼리 언어(2) : QueryDSL QueryDSL은 쿼리를 문자가 아닌 코드로 작성해도, 쉽고 간결하며 그 모양도 쿼리와 비슷하게 개발할 수 있는 프로젝트이다. QueryDSL은 오픈소스 프로젝트이며, 이름 그대로 쿼리 즉 데이터를 조회하는 데 기능이 특화되어 있다. QueryDSL 설정 필요 라이브러리 com.mysema.querydsl querydsl-jpa 3.6.3 com.mysema.querydsl querydsl-apt 3.6.3 provided querydsl-jpa: QueryDSL JPA 라이브러리 querydsl-apt: 쿼리 타입(Q)을 생성할 때 필요한 라이브러리 환경 설정 QueryDSL을 사용하려면 엔티티를 기반으로 쿼리 타입이라는 쿼리용 클래스를 생성해야 한다. 아래와 같이 쿼리 타입 생성용 플러그인을 pom... 2020. 10. 5. [JPA] 객체지향 쿼리 언어(1) : JPQL JPQL(Java Persistence Query Language)은 엔티티 객체를 조회하는 객체지향 쿼리다. JPQL은 SQL을 추상화해서 특정 데이터베이스에 의존하지 않는다. 그리고 데이터베이스 방언만 변경하면 JPQL을 수정하지 않아도 자연스럽게 데이터베이스를 변경할 수 있다. 또한 JPQL은 SQL보다 간결하다. //JPQL 사용 String jpql = "select m from Member as m where m.username = 'kim'"; List resultList = em.createQuery(jpql, Member.class).getResultList(); //실제 실행된 SQL select member.id as id, member.age as age, member.team_id.. 2020. 9. 30. [JPA] 값 타입 JPA의 데이터 타입을 크게 분류하면 엔티티 타입과 값 타입으로 나눌 수 있다. 엔티티 타입은 @Entity로 정의하는 객체이고, 값 타입은 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체를 말한다. 엔티티 타입은 식별자를 통해 지속해서 추적할 수 있지만, 값 타입은 식별자가 없고 숫자나 문자같은 속성만 있으므로 추적할 수 없다. 값 타입은 다음 3가지로 나눌 수 있다. 기본값 타입 임베디드 타입(복합 값 타입) 컬렉션 값 타입 기본값 타입 @Entity public class Member { . @Id @GeneratedValue private Long id; //기본값 타입 private String name; private int age; ... } 위의 엔.. 2020. 9. 23. [JPA] 프록시와 연관관계 관리 프록시 엔티티를 조회할 때 엔티티들이 항상 사용되는 것은 아니다. 예를 들어 회원 엔티티를 조회하여 정보를 출력할 때 팀 엔티티는 전혀 사용하지 않으므로 회원과 연관된 팀 엔티티까지 데이터베이스에서 함께 조회해 두는 것은 효율적이지 않다. JPA는 이런 문제를 해결하려고 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 제공하는데 이것을 지연로딩이라고 한다. 지연 로딩 기능을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데 이것을 프록시 객체라 한다. 엔티티를 조회할 때는 find()를 사용한다. 하지만 엔티티를 실제 사용하는 시점까지 데이터베이스 조회를 미루고 싶으면 EntityManager.getReference() 메소드를 사용하면 된다. .. 2020. 9. 22. 이전 1 2 3 다음