목록JPA (4)
쟈미로그
영속성 컨텍스트의 특징/장점 1차 캐시 동일성 보장 트랜잭션을 지원하는 쓰기 지연 변경 감지 지연 로딩 영속성 컨텍스트가 필요한 이유와 장점을 예시와 함께 알아보자. 1. 1차 캐시 영속성 컨텍스트 내부의 캐시. 영속 상태의 엔티티들이 저장되는 곳이라고 보면 된다. 쉽게 말하면, @Id로 매핑한 키-엔티티 인스턴스가 Map으로 저장되는 장소다. em.persist(~~); 를 통해 엔티티를 영속하면 아래 같은 그림이 된다. 엔티티 조회 조회를 위해서 em.find()를 호출하면 1차 캐시에서 엔티티를 우선으로 찾고, 캐시에 없으면 DB에서 조회를 한다. (메모리에 있는 1차 캐시에서 바로 조회할 수 있으므로 성능상 장점이 생김) 캐시에 없어서 DB에서 조회를 한 경우엔, 조회한 엔티티를 1차 캐시에 우선..
서론 Spring Data JPA를 주로 사용하면서, 단순 CRUD 프로젝트를 할 때는 큰 의문을 갖지 않고 개발했던 것 같다. 그만큼 Spring Data JPA는 추상화가 잘돼서 사용하기 편리한 기술이었다..! 하지만 JPA 관련 에러를 만나서 서칭해볼 때면 설명을 잘 이해할 수 없었고, 그건 JPA 기술에대한 기초 지식 부족 때문이었다. 그래서 이번엔 책의 3장을 읽으면서 JPA 기초를 공부해보고자한다! (구현은 하이버네이트 기준이다.) 엔티티 매니저 팩토리, 엔티티 매니저 엔티티 매니저 팩토리 엔티티 매니저를 생성하는 공장. persistence.xml(or application.yml 등)에 기재한 DB 정보를 바탕으로 생성된다. 생성될 때 비용이 커서, 처음 설정 파일 기준으로 생성된 이후부턴..
@Query 어노테이션의 nativeQuery = true 옵션을 사용해서 네이티브 쿼리를 사용하려던 도중 문제가 발생했다. org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mainController' defined in file [/Users/kakaobank/Desktop/practice/build/classes/java/main/com/blog/practice/controller/MainController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is or..
@Query 어노테이션을 사용해서 Native Query, JPQL을 사용하면서 예상치 못한 에러들을 마주쳤었다. 단순히 메소드 위에 Query 어노테이션만 붙여서 쿼리를 작성하면 런타임에러가 발생했다. org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations [UPDATE com.jyami.jyamibank.account.domain.account.Account a SET a.balance = a.balance - :amount WHERE a.accountNum = :accountNum AND a.balance >= :amount] at org.hibernate.hql.internal.ast.Qu..