JPA 대 Jakarta Data
리포지토리 인터페이스를 선언하고 Jakarta Data가 DAO 구현을 생성하도록 합니다.
코드 비교
✕ Jakarta EE 8+
@PersistenceContext
EntityManager em;
public User findById(Long id) {
return em.find(User.class, id);
}
public List<User> findByName(String name) {
return em.createQuery(
"SELECT u FROM User u WHERE u.name = :name",
User.class)
.setParameter("name", name)
.getResultList();
}
public void save(User user) {
em.persist(user);
}
✓ Jakarta EE 11+
@Repository
public interface Users extends CrudRepository<User, Long> {
List<User> findByName(String name);
}
이 코드에 문제가 있나요? 알려주세요.
모던 방식이 더 나은 이유
보일러플레이트 제로
인터페이스를 선언합니다; 컨테이너가 배포 시점에 전체 DAO 구현을 생성합니다.
파생 쿼리
findByNameAndStatus 같은 메서드 이름이 자동으로 파싱됩니다 — JPQL이나 SQL이 필요 없습니다.
이식 가능
모든 Jakarta EE 11 호환 런타임이 벤더 종속성 없이 리포지토리 구현을 제공합니다.
이전 방식
JPA EntityManager
모던 방식
Jakarta Data 리포지토리
JDK 버전
21
난이도
중급
JDK 지원
JPA 대 Jakarta Data
사용 가능
Jakarta EE 11 / Java 21 (2024) 이후 사용 가능
동작 원리
Jakarta Data(Jakarta EE 11)는 데이터 접근을 순수 인터페이스로 만듭니다. 메서드 이름이 쿼리가 되고, 컨테이너가 구현을 생성하며, 수동 EntityManager 코드가 필요 없습니다.
관련 문서