본문 바로가기

728x90
반응형

전체 글

(75)
컬렉션과 부가 기능 - (1) 컬렉션JPA에서는 자바에서 기본으로 제공하는 Collection, List, Set, Map 컬렉션을 지원한다 일대다이나 다대다 엔티티 관계를 매핑할 때, 값 타입 하나 이상을 보관(@ElementCollection)할 때 컬렉션을 사용할 수 있다 JPA 구현체에 따라서 제공하는 기능이 조금씩 다를 수 있다JPA와 컬렉션엔티티를 영속으로 만들 때 컬렉션 필드를 하이버네이트에서 준비한 컬렉션으로 감싸서 사용한다  원래 ArrayList 타입이었던 필드가 엔티티를 영속 상태로 만든 후 하이버네이트가 제공하는 PersistentBag 타입으로 변경된다 원본 컬렉션을 감싸는 내장 컬렉션을 생성해 이 컬렉션을 사용하도록 참조를 변경한다 이 내장 컬렉션을 원본 컬렉션을 감싸고 있다는 의미의 래퍼 컬렉션이라고도 한다..
웹 애플리케이션과 영속성 관리 - (2) OSIV OSIV(Open Session In View)는 영속성 컨텍스트를 뷰까지 열어둔다는 의미이다 영속성 컨텍스트가 살아있으면 엔티티는 영속 상태로 유지되고 뷰에서도 지연 로딩을 사용할 수 있다과거 OSIV: 요청 당 트랜잭션클라이언트의 요청이 들어오면 서블릿 필터나 스프링 인터셉터에서 트랜잭션을 사작하고 요청이 끝날 때 트랜잭션도 끝내는 방식을 요청 당 트랜잭션 방식의 OSIV라고 한다 영속성 컨텍스트가 처음부터 끝까지 살아있으므로 조회한 엔티티도 영속 상태를 유지한다 뷰에서도 지연 로딩이 가능하므로 엔티티를 미리 초기화할 필요가 없다  요청 당 트랜잭션 방식의 OSIV 문제점 프레젠테이션 계층에서 엔티티를 변경할 수 있어 뷰에 노출할 때만 변경하고 싶은 데이터가 데이터베이스에 까지 영향을 줄 수..
웹 애플리케이션과 영속성 관리 - (1) 트랜잭션 범위의 영속성 컨텍스트스프링 컨테이너의 기본 전략스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다 트랜잭션의 범위와 영속성 컨텍스트의 생존 범위가 같다는 의미이다 즉, 트랜잭션이 시작할 때 영속성 컨텍스트를 생성하고 트랜잭션이 끝날 때 영속성 컨텍스트를 종료한다  @Transactional이 붙은 메소드를 실행하기 전에 스프링 트랜잭션 AOP가 먼저 동작한다 스프링 트랜잭션 AOP는 대상 메소드를 호출하기 전에 트랜잭션을 시작하고, 대상 메소드가 정상 종료되면 트랜잭션을 커밋하면서 종료한다 트랜잭션을 커밋하면 JPA는 먼저 영속성 컨텍스트를 플러시해 변경 내용을 데이터베이스에 반영한 후 데이터베이스 트랜잭션을 커밋한다 예외가 발생하는 경우 트랜잭션을 롤백하고 종료하는데 ..
스프링 데이터 JPA - (2) 명세 스프링 데이터 JPA는 책 도메인 주도 설계에 등장하는 명세라는 개념을 사용할 수 있도록 지원한다-> JPA Criteria로 지원한다 명세(Specification)는 특정 객체가 주어진 조건을 충족하는지 여부를 판단하는 데 사용되는 패턴이다 명세는 참이나 거짓으로 평가되는 술어와 이를 조합하는 연산자로 구성된다 스프링 데이터 JPA에서 술어는 Specifictaion 클래스로 정의되어 있다 Specification은 컴포지트 패턴(composite pattern)으로 구정되어 있어 여러 Specification을 조합할 수 있다다양한 검색 조건을 조립해 새로운 검색조건을 쉽게 만들 수 있다 명세 기능을 사용하려면 JpaSpecificationExecutor 인터페이스를 상속받으면 된다public..
스프링 데이터 JPA - (1) 스프링 데이터 JPA 소개스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트이다 CRUD 처리를 위한 인터페이스를 제공해 리포지토리 개발 시 인터페이스만 작성하면 실행 시점에 스프링 데이터 JPA가 구현 객체를 동적으로 생성해서 주입해준다데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발을 완료할 수 있다public interface MemberRepository extends JpaRepository { Member findByUsername(Stirng username);} JPA는 메소드 이름을 분석해 JPQL을 실행해준다스프링 데이터 프로젝트스프링 데이터 JPA는 스프링 데이터 프로젝트의 하위 프로젝트 중 하나이다 스프링 데이터 프로젝트는 다양한 데이..
객체지향 쿼리 언어 - (7) 객체지향 쿼리 심화벌크 연산수백 개 이상의 엔티티를 수정하거나 삭제하는 경우 벌크 연산을 사용하면 빠르게 처리할 수 있다 예를 들어 재고가 10개 미만인 모든 상품의 가격을 10% 올리려면 다음과 같이 벌크 연산을 사용하면 된다String qlString = "update Product p " + "set p.price = p.price * 1.1 " + "where p.stockAmount 벌크 연산은 executeUpdate() 메소드를 사용한다이 메소드는 벌크 연산으로 영향을 받은 엔티티 건수를 반환한다 삭제도 같은 메소드를 사용한다  벌크 연산의 주의점 벌크 연산이 영속성 컨텍스트를 무시하고 데이터베이스에 직접 쿼리한다는 점을 주의해야 한다-> 영속성 컨텍스트에 있는 값과 데이터..
객체지향 쿼리 언어 - (6) JPQL - (5)조건식타입표현 대소문자 구분 없음 - 문자: 작은 따옴표 사이에 표현, 작은 따옴표는 ‘’으로 표현- 숫자: L(Long), D(Double), F(Float)- 날짜: DATE {d ’yyyy-mm-dd’}, TIME {t ’hh—mm—ss’}, DATETIME {ts ‘yyyy-mm-dd hh:mm:ss.f’}- Boolean: TRUE, FALSE- Enum: 패키지명을 포함한 전체 이름을 사용- 엔티티 타입: 엔티티 타입을 표현, 상속과 관련 (TYPE(m) = Member)  BETWEEN, IN, LIKE, NULL - betweenx [not] between a and b: x가 a와 b 사이의 값이면 참 (포함) - inx [not] in (): x와 같은 값이 하나라도 ..
객체지향 쿼리 언어 - (5) JPQL - (4)경로 표현식경로 표현식은 .을 찍어 객체 그래프를 탐색하는 것이다 용어 정리 상태 필드: 단순히 값을 저장하기 위한 필드연관 필드: 연관관계를 위한 필드, 임베디드 타입 포함 단일 값 연관 필드: 다대일, 일대일, 대상이 엔티티컬렉션 값 연관 필드: 일대다, 다대다, 대상이 컬렉션  경로 표현식과 특징 - 상태 필드 경로 경로 탐색의 끝, 더는 탐색할 수 없다select m.username, m.age from Member m - 단일 값 연관 경로 묵시적으로 내부 조인이 일어난다외부 조인은 명시적으로 join 키워드를 사용해야 한다 계속해서 탐색할 수 있다select o.member from Order o select o.member.teamfrom Order owhere o.prod..

728x90
반응형