JPA란 자바 ORM 기술에 대한 표준 명세로, JAVA에서 제공하는 API이다.
영속성(Persistence) 영속성(Persistence)란 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 말한다.
JPA를 이해하려면 영속성 컨텍스트를 이해해야한다.
지난 글에 이어서 영속성 컨텍스트에 대해서 작성해보겠다.
Flush는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 것이다. 보통 데이터베이스 트랜잭션이 커밋될 때 플러시가 일어난다.
준영속 상태란 영속 상태를 없애는 것이다.
JPA에서 제일 중요하게 봐야 되는 2가지 측면이 있다. 매커니즘적 측면과 정적인 측면이다.
JPA에서 엔티티랑 테이블 맵핑하는 것은 사실 별게 없다. 그런데 필드와 컬럼은 좀 다양하다.
JPA에서 가장 중요한 것은 '객체와 관계형 데이터베이스(RDB) 테이블이 어떻게 매핑되는지를 이해하는 것'이라고 생각한다. JPA의 목적인 '객체 지향 프로그래밍과 데이터베이스 사이의 패러다임 불일치 해결'을 생각하면 이유를 알 수 있다.
이번 글은 지난 글에 이어서 JPA 연관관계 중 다중성에 작성하겠습니다. 다중성은 데이터베이스를 기준으로 결정된다.
객체의 상속관계와는 다른 RDB에서의 상속 관계 매핑이 존재한다.
JPA 프록시 부분이 조금 쉽지가 않다. 하지만 매우 중요하기 때문에 집고 넘어가야한다.
⭐️ 영속성 전이(CASCADE) 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶으면 영속성 전이 기능을 사용하면 된다. JPA는 CASCADE 옵션으로 영속성 전이를 제공한다.
기본 값 타입들은 생명주기가 엔티티에 의존되어 있다. 예를 들어 Student라는 엔티티에 있는 ine age, String name은 student1 객체가 삭제 되면 같이 삭제 된다. 참고로 자바의 기본 타입은 절대 공유되지 않는다.
⭐️ JPQL JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공
⭐️ 프로젝션 프로젝션은 셀렉트 절에 조회할 대상을 지정하는 것을 말한다. 프로젝션 대상: 엔티티, 임베디드 타입, 스칼라 타입(숫자, 문자등 기본 데이터 타입)
⭐️ Join JPQL의 조인은 SQL 조인과 실행되는 것은 똑같다. 차이가 뭐냐면 entity 중심으로 동작한다는 것이다. 조금 객체 스타일로 조인 문법이 나간다.
조건식은 기본 CASE 식과 조건 CASE 식으로 나뉜다. 마치 자바의 스위치 케이스문과 비슷하다.
엔티티 직접 사용 - 기본 키 값 객체 인스턴스는 참조 값으로 식별하고 테이블의 행(row)은 기본 키 값으로 식별한다. JPQL에서 엔티티를 직접 사용하면 SQL에서 해당 엔티티의 기본 키 값을 사용한다.
동적 쿼리는 em.createQuery(”select ..”)와 같이 JPQL을 문자로 완성해서 직접 넘기는 것을 동적 쿼리라 한다.
⭐️ 벌크 연산 엔티티를 수정하려면 영속성 컨텍스트의 변경 감지 기능이나 병합을 사용하고, 삭제하려면 엔티티 매니저의 remove() 메서드를 사용한다. 하지만, 이러한 방법으로 수많은 엔티티를 하나씩 처리하기에는 시간이 오래 걸릴 것이다.
OSIV를 왜 알아야할까? OSIV를 모르면 장애로 이어질 수가 있기 때문이다.
Hibernate와 함께 Spring Data JPA를 사용하면 Hibernate의 추가 기능도 사용할 수 있다. @DynamicUpdte는 그러한 기능 중 하나이다.
결론부터 말하자면 사용할 수 없다.