엔티티매니저
엔티티의 생명주기를 관리하는 기능을 수행. DB와의 CRUD 연산을 중개하며, 이러한 연산들을 수행
사용 목적
개발자가 직접 복잡한 SQL 쿼리 작성 없이 객체를 통해 DB조작할 수 있게 하는 것으로, 코드를 보다 쉽게 유지보수 및 개발이 가능
엔티티 매니저의 DB 연산 수행 방법
데이터베이스와의 상호작용을 추상화하는 여러 메소드를 제공
- persist(): 새로운 엔티티를 연속성 컨텍스트에 추가하고, 이후 트랜잭션 커밋 시 데이터베이스에 저장
- merge(): 준영속 상태의 엔티티를 영속 상태로 복구하며, 변경된 정보를 데이터베이스에 동기화
- remove(): 엔티티를 영속성 컨텍스트에서 삭제 상태로 표시하며, 트랜잭션 커밋 시 DB에서 해당 엔티티를 삭제
- find(): 주어진 엔티티의 클래스 타입과 ID를 기반으로 DB에서 엔티티를 검색
- createQuery(): JPQL을 사용해 복잡한 조회를 수행할 수 있는 쿼리를 생성
엔티티 매니저의 생명주기 관리
- persist(): 엔티티를 영속 상태로 만듬
- detach(): 영속성 컨텍스트에서 엔티티를 분리하여 준영속 상태로 만듦
- merge(): 준영속 상태의 엔티티를 다시 영속 상태로 복구
- remove(): 엔티티를 삭제 예정으로 표시하며, 트랜잭션 커밋 시 삭제
-> 엔티티의 상태를 관리하며, DB와의 동기화를 담당
엔티티 팩토리
엔티티 매니저 인스턴스를 생성하는 역할을 수행. 애플리케이션은 엔티티 매니저를 직접 생성하는 대신, 엔티티 팩토리를 통해 필요에 따라 엔티티 매니저 인스턴스를 생성
사용목적
엔티티 매니저의 생성을 추상화하고 관리하는 것으로, 애플리케이션 설정과 환경에 맞게 엔티티 매니저의 유연한 설정이 가능
엔티티 팩토리와 엔티티 매니저의 차이
- 앤티티 팩토리: 애플리케이션의 시작 시점에 생성, 이는 엔티티 매니저 인스턴스를 생성하는데 사용되어짐. 엔티티팩토리는 주로 설정 정보를 기반으로 엔티티 매니저를 생성하며, 전체 애플리케이션에서 공유될 수 있음
- 엔티티 매니저: 실제 DB 연산을 수행하는 인스턴스로, 엔티티 매니저는 특정 작업 세션 동안 사용되며, 연산이 끝나면 종종 닫힘. 이는 데이터베이스와의 상호작용을 관리하고, 엔티티의 생명주기를 제어하는데 필요함