본문 바로가기

spring/jpa17

자바 ORM 표준 JPA 프로그래밍 - 16장 트랜잭션과 락, 2차 캐시 트랜잭션과 락 트랜잭션과 격리 수준 트랜잭션은 원자성, 일관성, 지속성을 보장한다. 문제는 격리성인데 트랜잭션간에 격리성을 완전히 보장하려면 트랜잭션을 거의 차례대로 실행해야 한다. 이렇게 하면 동시성 처리 성능이 매우 나빠진다. 이런 문제로 인해 ANSI 표준은 트랜잭션의 격리 수준을 4단계로 나누어 정의했다. READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE 순서대로 READ UNCOMMITED의 격리 수준이 가장 낮고 SERIALIZABLE의 격리 수준이 가장 높다. 격리 수준이 낮을수록 동시성은 증가하지만 격리 수준에 따른 다양한 문제가 발생한다. 격리 수준에 따른 문제점은 다음과 같다 DIRTY READ NON-REPEATABLE REA.. 2021. 9. 5.
자바 ORM 표준 JPA 프로그래밍 - 15장 고급 주제와 성능 최적화 예외 처리 JPA 표준 예외 처리 JPA 표준 예외들은 javax.persistence.PersistenceException의 자식 클래스다. 그리고 이예외 클래스는 RuntimeException의 자식이다. 따라서 JPA 예외는 모두 언체크 예외다. 트랜잭션 롤백을 표시하는 예외 : 트랜잭션 롤백을 표시하는 예외는 심각한 예외이므로 복구해선 안된다. 이 예외가 발생하면 트랜잭션을 강제로 커밋해도 트랜잭션이 커밋되지 않고 javax.persistence.RollbackException 예외가 발생한다. 트랜잭션 롤백을 표시하지 않는 예외 : 트랜잭션 롤백을 표시하지 않는 예외는 심각한 예외가 아니다. 따라서 개발자가 트랜잭션을 커밋할지 롤백할지 판단하면 된다. 트랜잭션 롤백 시 주의사항 트랜잭션을 롤백하.. 2021. 9. 4.
자바 ORM 표준 JPA 프로그래밍 - 14장 컬렉션과 부가 기능 컬렉션 JPA는 자바에서 기본으로 제공하는 Collection, List, Set, Map 컬렉션을 지원한다. @OneToMany, @ManyToMany를 사용해서 엔티티 관계를 매핑 @ElementCollection을 사용해서 값 타입을 하나 이상 보관 하이버네이트는 엔티티를 영속 상태로 만들 때 컬렉션 필드를 하이버네이트에서 준비한 컬렉션으로 감싸서 사용한다. @Test public void test01() { Team team = new Team(); System.out.println("before persist : " + team.getMembers().getClass()); em.persist(team); System.out.println("after persist : " + team.getMe.. 2021. 8. 28.
자바 ORM 표준 JPA 프로그래밍 - 13장 웹 애플리케이션과 영속성 관리 OSIV OSIV(Open Session In View)는 영속성 컨텍스트를 뷰까지 열어둔다는 뜻이다. 영속성 컨텍스트가 살아있으면 엔티티는 영속상태로 유지된다. 따라서 뷰에서도 지연 로딩을 사용할 수 있다. spring: jpa: open-in-view: true // 기본값 OSIV가 true이면 뷰에서도 다음과 같이 지연 로딩을 할 수 있다. @GetMapping public Member findById() { Member member = memberService.findById(); Team team = member.getTeam(); System.out.println(team); ... } 하지만 OSIV를 false로 주게되면 다음과 같이 에러가 발생한다. View까지 영속성 컨텍스트가 유지되.. 2021. 8. 21.
자바 ORM 표준 JPA 프로그래밍 - 12장 스프링 데이터 JPA 스프링 데이터 JPA는 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트다. 이 프로젝트는 데이터 접근 계층을 개발할 때 지루하게 반복되는 CRUD 문제를 해결한다. 스프링 데이터 JPA는 스프링 데이터 프로젝트의 하위 프로젝트 중 하나다. 즉 스프링 데이터 JPA 말고도 다른 DB(MONGO DB, REDIS 등등)를 위한 프로젝트가 있다는 뜻이다. 스프링 데이터 JPA 설정 스프링 데이터 JPA를 사용하기 위해선 먼저 의존성 설정을 해줘야 한다. implementation('org.springframework.boot:spring-boot-starter-data-jpa') 공통 인터페이스 기능 스프링 데이터 JPA는 간단한 CRUD 기능을 공통으로 처리하는 JpaReposit.. 2021. 8. 17.
자바 ORM 표준 JPA 프로그래밍 - 10장 객체지향 쿼리 언어 객체지향 쿼리 EntityManager.find() 메소드를 사용하면 식별자로 엔티티 하나를 조회할 수 있다. 하지만 이 기능만으로 애플리케이션을 개발하기는 어렵다. JPQL JPQL은 엔티티 객체를 조회하는 객체지향 쿼리이다. 문법은 SQL과 미슷하고 ANSI 표준 SQL이 제공하는 기능을 유사하게 지원한다. JPQL은 SQL을 추상화해서 특정 데이터베이스에 의존하지 않는다. 그리고 데이터베이스 Dialect만 변경하면 JPQL을 수정하지 않아도 자연스럽게 데이터베이스를 변경할 수 있다. @Test public void test01() { TypedQuery query = em.createQuery("select m from Member m", Member.class); List resultList =.. 2021. 7. 24.