개발/JPA & Hibernate
-
Schema-validation: missing table [name] 에러개발/JPA & Hibernate 2022. 3. 31. 03:43
결론부터 보기 현재 MySQL 5.7, MariaDB JDBC Driver 그리고 Spring Data JPA (Hibernate 5.67) 을 사용하고 있다. Spring Data JPA 를 사용하다보면 hibernate ddl-auto 라는 옵션을 사용할 수 있다. 옵션에는 validate, create, create-drop, update, none 등이 있다. 그리고 현재 validate 옵션을 사용 중이다. validate : 서버를 기동할 때 JPA Entity 클래스와 DB 스키마를 비교하여 [테이블, 컬럼, id generator] 가 유효한지 검사하는 옵션이다. 문제 현상 분명 테이블이 있는데, 테이블이 없다고 한다. validate 옵션을 설정해놓아서 서버를 기동하니 schema val..
-
@Modifying 옵션 알아보기 (flush, clear)개발/JPA & Hibernate 2021. 8. 14. 01:28
JPA Spring Data 에서 벌크성 update, delete를 할 땐, @Modifying 애노테이션을 이용해야 합니다.. @Modifying 에는 flushAutomatically, clearAutomatically 라는 두 가지 옵션이 있는데, 이에 대한 내용을 간단하게 정리해보겠습니다. @Modifying 옵션 살펴보기 flushAutomatically 해당 쿼리를 실행했을 때, flush()를 발생시킵니다. 요건 뒤에서 알아보겠습니다. 지금 결론만 간단하게 말하자면, true든 false든 항상 true 처럼 동작되므로 무시해도 됌. (hibernate 설정 때문) clearAutomatically 중요한건 이 옵션입니다. // 영속성 컨텍스트에만 존재 Team save = teamRepo..
-
N+1 문제란? 그리고 해결방법 (feat. fetch join)개발/JPA & Hibernate 2021. 7. 18. 15:19
N+1 문제란? 객체 조회(1회)의 결과로 n개의 결과가 나온다고 했을 때, 조회된 객체안에 또 다른 객체가 있을 수 있다. 그렇다면 객체안의 객체를 조회하기 위해 또 다른 쿼리가 발생하는 경우가 있는데, 그러면 처음 조회된 n개의 결과만큼 새로운 쿼리가 발생한다. 즉, 첫 조회 1회 + 첫 조회 결과 n개 만큼의 결과가 증가하는 현상을 놓고 n+1 문제라고 한다. JPA에서 N+1 문제 해결 Fetch Join 사용 가장 일반적인 방법이다. Fetch Join에 관한 설명은 이 글 마지막에 정리했다. 애초에 사용될 데이터라면 지연로딩을 하지않고, 첫번째 쿼리때 Fetch Join 해서 가져오는 것이 좋다. Fetch Join에서도 설명하겠지만, Join이 아닌 Fetch Join의 차이는 Project..
-
JPA의 쓰기지연 기능 확인해보기 (transactional write-behind)개발/JPA & Hibernate 2021. 7. 16. 19:00
JPA의 특징중 하나는 영속성 컨텍스트 (Persistence Context)내에서 쓰기지연(transactional write-behind)이 발생한다는 것입니다. 이 글에서는 JPA와 Mybatis를 이용해 쓰기지연을 했을때와 안했을 때를 비교해보려고 합니다. (Mybatis는 쓰기지연을 하지 않습니다.) 쓰기지연이란? (transactional write-behind) 영속성 컨텍스트에 변경이 발생했을 때, 바로 데이터베이스로 쿼리를 보내지 않고 SQL 쿼리를 버퍼에 모아놨다가, 영속성 컨텍스트가 flush 하는 시점에 모아둔 SQL 쿼리를 데이터베이스로 보내는 기능입니다. 사전 지식 - 영속성 컨텍스트는 동일성(Identity)를 보장한다. - 영속성 컨텍스트는 1차 캐시의 역할을 한다. 즉 객체..