JPQL로 엔티티를 조회하면 영속성 컨텍스트에서 관리되지만 엔티티가 아니면 영속성 컨텍스트에서 관리되지 않는다.
select m from Member m //엔티티 조회 (관리O)
select o.address from Order o //임베디드 타입 조회 (관리X)
select m.id, m.username from Member m //단순 필드 조회 (관리X)
조회한 엔티티만 영속성 컨텍스트가 관리한다.
em.find()
메소드는 엔티티를 영속성 컨텍스트에서 먼저 찾고 없으면 데이터베이스에서 찾는다.
스프링 데이터 JPA는 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트다.
데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발을 완료할 수 있다.
일반적인 CRUD 메소드는 JpaRepository 인터페이스가 공통으로 제공하므로 문제가 없다.
하지만 memberRepository.findByUsername() 처럼 직접 작성한 공통으로 처리할 수 없는 메소드는 스프링 데이터 JPA가 메소드 이름을 분석해서 JPQL을 실행한다.
select m from Member m where username =: username