Java/JPA21 H2 Database 사용법 최초 생성 주소를 아래와 같이 생성(파일생성)jdbc:h2:~/ 최초 생성 이후 접속 시 접근 주소jdbc:h2:tcp://localhost/~/ 2024. 5. 13. SpringDataJPA - EntityGraph, fetch join 간단하게 하기 fetch join을 SpringDataJPA에서는 @EntityGraph 어노테이션을 통해 간단하게 할 수 있다. // 한방쿼리로 들고 오는 fetch join@Query("select m from Member m left join fetch m.team")List findMemberFetchJoin();위의 fetch join 메서드를 EntityGraph를 사용하면 아래와 같이 바꿀 수 있다. EntityGraph를 이용하면 메서드 이름으로 쿼리 생성 + 패치조인처럼 쓸 수 있음@Override@EntityGraph(attributePaths = {"team"})List findAll();jpql 대신 @EntityGraph 어노테이션을 사용한다. attributePaths에 fetch join할 .. 2024. 1. 10. SpringDataJPA - 벌크성 수정 쿼리 Dirty Checking으로 여러 건 수정시 건마다 쿼리 발생함.쿼리 한 번으로 쫙 다 수정하는 건 JPA에서는 벌크성 수정쿼리라고 함벌크성 수정 쿼리를 이용하면 한 번의 쿼리로 대량의 데이터를 수정할 수 있다. @Modifying 어노테이션 사용Repository 수정 메서드에 @Modifying 을 붙여준다(안붙이면 에러 발생)// 회원의 나이를 변경하는 벌크성 쿼리// age 이상인 경우 1살 추가@Modifying //Modifying이 있어야 JPA의 executeUpdate 호출함@Query("update Member m set m.age = m.age + 1 where m.age >= :age")int bulkAgePlus(@Param("age") int age); test 코드 예제)@.. 2024. 1. 10. SpringDataJPA - 페이징을 쉽게 하는 법 Page 객체Repository 인터페이스에 Page 메서드 이름(Pageable 변수이름)을 작성한다.public interface MemberRepository extends JpaRepository { // 페이징 Page findByAge(int age, Pageable pageable); SpringDataJPA로 페이징 처리를 하면 페이징 계산을 할 필요가 없다. 이미 구현되어있다,. 메서드 호출 시 Pageable 구현체(PageRequest)를 매개변수로 넣어준다.*Page 인덱스가 1이 아니라 0부터 시작함. 유의 아래는 test 코드이다.int age = 10;// SPRING DATA JPA는 page index가 1이 아니라 0부터 시작한다 (PageRequest = Pa.. 2024. 1. 10. SpringDataJPA - 메서드 및 유연한 반환타입 SpringDataJPA 주요 메서드save(S) : 새로운 엔티티는 저장하고 이미 있는 엔티티는 병합한다. delete(T) : 엔티티 하나를 삭제한다. 내부에서 EntityManager.remove() 호출 findById(ID) : 엔티티 하나를 조회한다. 내부에서 EntityManager.find() 호출 getOne(ID) : 엔티티를 프록시로 조회한다. 내부에서 EntityManager.getReference() 호출 findAll(…) : 모든 엔티티를 조회한다. 정렬( Sort )이나 페이징( Pageable ) 조건을 파라미터로 제공할 수 있다.참고: JpaRepository 는 대부분의 공통 메서드를 제공한다.쿼리메소드 기능쿼리 메소드 기능 3가지- 메소드 이름으로 쿼리 생성(간단한 쿼.. 2024. 1. 9. JPA실전 2 - OSIV와 성능 Open Session In View: 하이버네이트, Open EntityManager In View: JPA (관례상 OSIV라 한다.) spring.jpa.open-in-view : true 기본값 OSIV 전략은 트랜잭션 시작처럼 최초 데이터베이스 커넥션 시작 시점부터 API 응답이 끝날 때 까지 영속성 컨텍스트 와 데이터베이스 커넥션을 유지한다. 이를 통해 지연로딩이 가능하지만, 너무 오랜시간동안 데이터베이스 커넥션 리소스를 사용하기 때문에, 실시간 트래픽이 중요한 애플리케이션에서는 커넥션이 모자랄 수 있다. 이것은 결국 장애로 이어진다 spring.jpa.open-in-view: false OSIV 종료 open-in-view: false 로 해야 커넥션풀이 마르지 않음. OSIV를 끄면 커넥션.. 2023. 12. 12. 이전 1 2 3 4 다음