JPQL: 5개의 글
JPQL JPQL(Java Persistence Query Language)은 JPA를 구현한 프레임워크에서 사용하는 언어입니다. JPA 구현 프레임워크에서는 JPQL을 SQL로 변환해 데이터베이스에 질의하게 됩니다. JPQL은 테이블을 대상으로 쿼리하지 않고 객체를 고려해 쿼리합니다. 이 때문에 JPQL은 데이터베이스 테이블에 직접적인 의존 관계를 맺고 있지 않습니다. JPQL은 SQL과 비슷한 구조로 구성 됐습니다. SELECT ... FROM ... [WHERE ...] [GROUP BY ... [HAVING ...]] [ORDER BY ...] 이때 JQPL DELTE나 UPDATE는 다음과 같은 두개의 쿼리로 나타낼 수 있습니다. DELETE FROM ... [WHERE ...] UPDATE ...
JPA - 영속성 컨텍스트와 JPQL 쿼리 후 영속 상태인 것과 아닌것 -JPQL의 조회 대상은 엔티티, 임베디드 타입, 값 타입 같이 다양하다. 하지만 엔티티를 조회하면 영속성 컨텍스트에 관리되지만 나머지는 관리되지 않는다. 예를 들어 임베디드 타입만 참조해서 조회했을 경우에 값을 변경해서 플러시 시점에 반영되지 않는다. 하지만 엔티티를 조회하여 엔티티가 가지고 있는 임베디드타입을 변경했을 경우에는 플러시 시점에 변경이 반영이 된다. JPQL로 조회한 엔티티와 영속성 컨텍스트 -JPQL로 데이터베이스에서 조회한 엔티티가 영속성 컨텍스트에 이미 있으면 JPQL로 데이터베이스에서 조회한 결과를 버리고 대신에 영속성 컨텍스트에 있던 엔티티를 반환한다. 이때 식별자 값을 이용하여 비교한다. 여기서 동일하다는 ..
JPA - JPQL 서브쿼리 (객체지향 쿼리 언어),컬렉션 식 JPQL도 서브 쿼리를 지원하지만 몇 가지 제약사항이 존재한다. -WHERE, HAVING 절에서만 사용할 수 있고, SELECT,FROM절에서는 사용할 수 없다. /* * 서브쿼리 - SQL과 다르게 where,having 절에서만 사용가능하다. */ public void subQuery() { String jpql = "select m from MemberJPQL m where m.age > (select avg(m2.age) from MemberJPQL m2)"; TypedQuery query = em.createQuery(jpql,MemberJPQL.class); List teams = query.getResultList(); Syst..
JPA - JPQL 조인(객체지향쿼리),Java Persistence Query Language JPQL 조인은 SQL 조인과 기능은 거의 같고 문법만 약간 다르다. 내부 조인(inner join) /* * 내부조인 */ public void innerJoin() { String jpql = "select m,t " + "from MemberJPQL m inner join m.team t " + "where t.name = '티스토리1' " ; Query query = em.createQuery(jpql); List members = query.getResultList(); System.out.println("================innerJoin================="); for(Obj..
JPA - JPQL(객체지향쿼리) (예제소스파일/ jpql package참조) JPQL은 가장 중요한 객체지향 쿼리 언어이다. Criteria나 QueryDSL은 결국 JPQL을 편리하게 사용하도록 도와주는 기술이므로 JPA로 데이터베이스 엑세스를 다룬다면 JPQL은 꼭 필수라고 생각이 든다. SQL과 꼭 닮은 쿼리 언어이며 SQL은 데이터 중심의 쿼리라고 하면 JPQL은 엔티티를 대상으로 하는 쿼리 언어라고 할 수 있다. 결국 JPA에서 해당 JPQL을 분석한 다음 적절한 SQL로 변환해주어서 데이터베이스에서 데이터를 가져오는 것이다. JPQL 특징 1. 엔티티 객체를 조회하는 객체지향 쿼리이다.(테이블 대상이 아니다.) 2. JPQL은 SQL을 추상화해서 특정 데이터베이스에 의존하지 않는다.(데이터베..