스프링 데이터 JPA

1. 사용자 정의 레포지토리 스프링 데이터 JPA 레포지토리는 인터페이스만 정의하고 구현체는 스피링이 자동 생성해준다. 스프링 데이터가 JPA가 제공하는 인터페이스를 직접 구현하면 구현해야 하는 기능이 너무 많아진다. 인터페이스의 메서드를 구현해야 하는 상황 JPA 직접 사용 스프링 JDBC Template 사용 마이 바티스 사용 데이터 베이스 커넥션 직접 사용 Querydsl 사용 메서드를 구현하기 위해서는 사용자 정의 인터페이스를 새로 만들어야한다. 1) 인터페이스 public interface MemberRepositoryCustom { List findMemberCustom(); } 2) 구현클래스 @RequiredArgsConstructor public class MemberRepositoryI..
Hint & Lock 쿼리 힌트 기능은 JPA가 제공하는 것이 아니라 하이버네이트가 제공하는 기능이다. 우리는 지금까지 DB에 쿼리를 날리게 되면 2개의 중복된 데이터를 보관하고 있었다. 그 이유는 update 쿼리가 발생 할 수 있으므로, 원본 데이터를 보관해야 하기 때문! 즉 데이터의 변동이 생기면 영속성 컨텍스트에서 원본데이터와 비교한 후 update쿼리가 생성되는 것이다. 반대로 말하면 수정하지 않는 데이터는 원본데이터(스냅샷)을 저장하고 있을 필요가 없다. 이 경우 하이버네이트에서는 JPA구현체에게 힌트를 제공하여 중복 데이터 문제를 해결 할 수 있다. 1. 쿼리 힌트 @QueryHints(value = @QueryHint(name = "org.hibernate.readOnly", value =..
쿼리 메서드 기능 지금부터는 더 복잡한 JPA 메서드들을 구현해보고 스프링 데이터 JPA로 바꿔보겠다. 1. 메서드 이름으로 쿼리 생성 이름과 나이를 기준으로 회원을 조회 1) 순수 JPA public List findByUsernameAndAgeGreaterThan(String username, int age){ return em.createQuery("select m from Member m where m.username = :username and m.age > :age") .setParameter("username", username) .setParameter("age", age) .getResultList(); } 순수 JPA를 사용하면 이러한 메서드를 작성해야 한다. 하지만 데이터 JPA를 사..
JPA와 스프링 데이터 JPA 스프링 데이터 JPA는 JPA를 더 효율적으로 사용하기 위한 기술이다. 데이터 JPA는 매우 유용한 기능들을 많이 제공해 주지만, JPA를 활용하는 기술이기 때문에 JPA 동작원리를 알고 있어야 한다. 데이터 JPA가 만능인것은 아니다. 동적 쿼리는 QueryDSL을 이용해야함. 1. JPA 레포지토리 다음은 JPA를 이용한 Member레포지토리이다. @Repository public class MemberJpaRepository { @PersistenceContext private EntityManager em; public Member save(Member member){ em.persist(member); return member; } public void delete..
코드 미식가
'스프링 데이터 JPA' 태그의 글 목록