본문 바로가기

Spring JPA17

컬렉션과 부가 기능 - 17 JPA와 컬렉션 하이버네이트는 엔티티를 영속 상태로 만들 때 컬렉션 필드를 하이버네이트에서 준비한 컬렉션으로 감싸서 허용한다. @Entity public class Team { @Id private String id; @OneToMany @JoinColumn private Collection memberList = new ArrayList(); } Team team = new Team(); System.out.println("before persist = " + team.getMemberList().getClass()); entityManager.persist(team); System.out.println("after persist = " + team.getMemberList().getClass()); .. 2021. 8. 10.
애플리케이션과 영속성 관리 - 16 ] 스프링 컨테이너의 기본 전략 스프링 컨테이너는 트랜잭션 범위의 영속성 컨테스트 전략을 기본으로 사용한다. 트랜잭션 범위의 영속성 컨텍스트 전략이란? 트랜잭션 범위와 영속성 컨텍스트의 생존 범위가 같다. 즉, 트랜잭션을 시작할 때 영속성 컨텍스트를 생성하고 트랜잭션이 끝날 때 영속성 컨텍스트를 종료한다. 그리고 같은 트랜잭션 안에서는 항상 같은 영속성 컨텍스트에 접근한다. 스프링 프레임워크를 사용하면 비즈니스 로직을 시작하는 서비스 계층에 @Transactional 어노테이션을 사용해서 트랜잭션을 시작한다. 이 어노테이션이 있으면 호출한 메소드를 실행하기 직전에 스프링의 트랜잭션 AOP가 먼저 동작한다. 스프링 트랜잭션 AOP는 대상 메소드를 호출하기 직전에 트랜잭션을 시작하고, 대상 메소드가 정상 종.. 2021. 8. 8.
스프링 데이터 JPA - 15 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발을 완료할 수 있다. JpaRepository 계층 구조 save(S) : 새로운 엔티티를 저장하고 이미 있는 엔티티는 수정한다. delete(T) : 엔티티 하나를 삭제한다. 내부에서 EntityManager.remove()를 호출한다. findOne(ID) : 엔티티 하나를 조회한다. 내부에서 EntityManager.find()를 호출한다. getOne(ID) : 엔티티를 프록시로 조회한다. 내부에서 EntityManager.getReference()를 호출한다. findAll(...) : 모든 엔티티를 조회한다. 정렬이나 페이징조건을 파라미터로 제공할 수 있다. 쿼리 메소드 기능 메소드 이름만으로 쿼리를 생성하는 기능 -> .. 2021. 7. 31.
객체 지향 쿼리 언어 - 14 Criteria Criteria 쿼리는 JPQL을 자바 코드로 작성하도록 도와주는 빌더 API 문자가 아닌 코드로 JPQL을 작성하므로 문법 오류를 컴파일 단계에서 잡을 수 있다. 문자 기반의 JPQL보다 동적 쿼리를 안전하게 생성할 수 있다. 코드가 복잡하고 장황해서 직관적으로 이해가 힘들다는 단점도 있다. //JPQL: select m from Member m //Criteria 쿼리 빌더 CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); //Criteria 생성, 반환 타입 지정 CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Member.class); //from 절 .. 2021. 7. 21.