위와 같이 코드는 3가지로 나뉜다.
Entity Manger Factory 생성 -> persistence.xml 을 읽어서 Entity Manger Factory 생성, 애플리케이션 처음 시작하면 하나 만들고 계속 공유한다. -> 애플리케이션 종료할 때 close() 한다JPA의 모든 기능은 Entity Manger가 제공한다. -> CRUD 기능 제공마지막에 무조건 em.close()를 해야한다.Entity Manager는 database 커넥션에 밀접한 관련이 있기 때문에 무조건 재상용 하면 안된다.Jpa Transaction 관리
- JPA는 항상 트랜젝션 안에서 데이터를 변경한다.
- try 내부 : 로직사용 -> catch : rollback()사용
- persist()로 하나의 값을 저장한다
- 만약 어떤 Entity 객체를 트랜젝션 내부에서 set 함수로 값을 변경한다면 자동으로 update함수를 구성하여서 DB에 반영한다 -> update함수는 JPA에 존재 하지 않음 트랜잭션 내부에서 자동으로 처리
JPQL
- Entity 정보가 아닌 Entity 객체를 대상으로 조회를 한다면 -> 모든 row를 가져와서 동일한 값을 가져와야한다.
- JPA는 위와 같은 문제를 JPQL(Java Persistence Query Language)이라는 쿼리 언어로 해결한다.
- JPQL은 select, from, where, group by, having, join등을 사용가능 하다.
- JPQL은 Enity객체 즉 내부 field 변수에 대해서 쿼리를 날린다.(ORM)
- SQL은 database 테이블 대상으로 쿼리를 날린다.(기본 mapper 같은거)
- JPQL은 DB table을 알지 못하고 Entity Table을 통해서만 query를 날린다.
- JPQL은 관례상 대무낮 소문자를 엄격히 구분 -> SQL은 구분하지 않음