본문 바로가기

JPA

(4)
JPQL - Select JPQL 을 쓸 때, 검색하는 방법을 알아보자. JPQL 은 객체지향적 쿼리기 때문에, 에플리케이션상의 무언가와 매칭되어야 한다. 그 무언가의 종류에는 다음과 같은 종류가 있을 수 있다. 엔티티 타입 임베디드 타입 스칼라 타입 이번 글에서는 다음 엔티티를 사용한다. @Entity @Getter @Setter public class JPQLMember { @Id @GeneratedValue private Long id; private String username; private int age; @ManyToOne @JoinColumn(name = "JPQLTEAM_ID") private JPQLTeam team; } @Entity @Getter public class JPQLOrder { @Id @Gene..
JPQL JPA 에서는 여러가지 쿼리를 날리는 방법을 지원한다. JPQL JPA Criteria QueryDSL Native Query JDBC Api 직접 사용 (Mybatis, Spring JDBC Template 등) JPQL : 객체지향 SQL : Java Persistence Query Language 테이블이 아닌 객체를 통하여 검색을 해야한다. JPA 는 객체지향 ORM 이기 때문에. EntityManager 는 find() 를 통해서 객체를 편하게 검색해올 수 있다. 하지만 이는 문제가 있다. 조건이 포함되지 않은 검색이므로 불필요한 데이터를 가져와서 메모리 낭비가 발생한다. 규모가 커지면 이는 성능에 나쁜 영향을 미칠 수 있다. 따라서, 검색조건이 포함되고, 객체지향적인 쿼리가 필요하며 이것이 J..
영속성 컨텍스트를 쓰면 좋은점 1차 캐시 1. 엔티티 매니저는 영속성 컨텍스트를 가지고, 영속성 컨텍스트는 1차캐시를 가진다. 2. 1차 캐시는 DB 에 영속화하고 영속화한 데이터를 꺼내오는 작업 사이의 캐시이다. 3. 1차 캐시는 영속성 컨텍스트에 @Id 로 지정한 값을 key, 그 객체 자체를 value 로 가지게 된다. 4. 두 존재 사이의 존재는 어디서든 (io 의 bufferedReader 같은 버퍼) 캐시역할과 버퍼역할을 할 수 있다. JPA 의 1차캐시에서도 마찬가지다. 5. 엔티티메니저는 보통 트랜잭션 단위로 생성하기 때문에, 영속성 컨텍스트 안의 1차캐시도 트랜잭션 단위로 생성되고 제거된다. 6. 영속 엔티티 객체의 동일성을 보장한다. System.out.println("====="); Member member1 = ..
Entity Manager, 영속성 컨텍스트 JPA 는 java 와 DB 사이에서 DB 의 데이터와 Java Application 의 객체를 연결시키는 ORM 기술이다. JPA 를 사용하기 위해서는 Xml 을 작성해야한다. META-INF/persistance.xml 로 위치는 고정이며, 아래와 같이 작성한다. 이는 보통 DB 마다 생성하게 된다. 우리는 에플리케이션 단에서 이 persistence unit 하나로 하나의 Entity Factory 를 만들 수 있다. Entity Manager DB 의 데이터들은 에플리케이션에서 Entity 라는 단위로 관리된다. JPA 는 하나의 요청마다 하나의 Entity manager 을 생성해준다. 이 Entity Manager 는 Entity 를 관리하는 일을 수행한다. JPA 의 모든 데이터 변경은 이 ..