Hibernate 5

[Hibernate] 쓰기 지연(write-behind) 동작 순서와 예외 케이스

Hibernate의 쓰기 지연하이버네이트의 “쓰기지연” 을 제공합니다. 쓰기지연은 다음과 같이 동작합니다.하이버네이트는 영속성 컨텍스트에 변경이 발생했을때, 즉시 쿼리를 DB로 날리지 않고, ActionQueue 라는 내부 구조에 쿼리 수행정보를 저장flush 시점에 ActionQueue 저장된 SQL 쿼리들을 실행이를 통해 애플리케이션과 DB 간 효율적인 네트워크 통신과 최적화된 실행의 장점이 있습니다.jdbc batch를 이용해 쿼리들을 건건이 DB에 보내지 않고 합쳐서 전송동일 엔티티, 동일 필드에 대한 여러 변경사항이 하나의 트래젝션 내에서 이뤄진 경우, 중간에 불필요한 update 쿼리는 제외하고 마지막 상태에 대한 update 쿼리만 전송이런 쓰기 지연에는 내부적으로 동작 순서가 있습니다.동작..

개발자 포포 2025.01.05

[Hibernate] Lazy Loading이 포함된 Response 유의

이 글은 과거에 운영하던 블로그에서 옮겨온 글 입니다. (2021.11.21. 작성됨)요약jackson 라이브러리로 하이버네이트 프록시 객체를 serialize 할 경우 오류가 발생합니다.1) 프록시 객체를 가져오지 않도록 join fetch를 사용하거나 2) 엔티티는 DTO로 모두 변환하여 Response body로 전달하면 문제를 피할 수 있습니다.이번 포스팅에서는 Lazy Loading이 포함된 엔티티를 ResponseEntity 응답 정보로 사용할때 유의 해야할 점을 다루어보려 합니다. No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to c..

개발자 포포 2024.09.17

[Hibernate] Collection 타입은 PersistentBag 타입으로 래핑된다.

이 글은 과거에 운영하던 블로그에서 옮겨온 글 입니다. (2022.01.15. 작성됨)요약하이버네이트에서는 컬렉션 타입을 org.hibernate.collection.internal.PersistentBag 인스턴스로 래핑하여 사용합니다.이 때문에 Collection 타입에서 orphanRemoval 옵션 사용시 주의 해야합니다.이와 관련 하여 실제 문제를 격은 사레는 다음 포스팅에서 다뤄져 있습니다.2024.09.17 - [개발자 포포] - [Hibernate] orphanRemoval 옵션 사용시 Collection 참조를 변경하지 말자 JPA 관련 공부를 하던 중, 컬렉션 타입은 org.hibernate.collection.internal.PersistentBag 인스턴스로 래핑된다는 놀라운 사실을..

개발자 포포 2024.09.17

[Hibernate] orphanRemoval 옵션 사용시 Collection 참조를 변경하지 말자

이 글은 과거에 운영하던 블로그에서 옮겨온 글 입니다. (2021.11.19. 작성됨)요약orphanRemoval 옵션으로 설정된 컬렉션을 연관관계로 가지는 경우, 컬렉션이 empty가 아닐때 참조 인스턴스를 변경하면 오류가 발생합니다. 이번 포스팅에선, JPA One-to-Many 연관관계를 사용하며 경험한A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance오류에 대해 공유하고자 합니다.문제 발생 배경도메인에 대해 간략히 말씀드리면, 지하철 노선(Line)은 여러 개의 구간으로 이루어져 있고 구간(Section)은 상행역(Station)과 하행역(Station), 구간 거리로 ..

개발자 포포 2024.09.17

[Hibernate] Hibernate6 업그레이드시 MySQL Field 함수 변환 오류

이 글은 과거에 운영하던 블로그에서 옮겨온 글 입니다. (2023.12. 작성됨) 이번 포스팅에서는 Hibernate6로 업그레이드 하면서 mysql의 field function 사용에 오류가 발생한 케이스를 공유하고자 합니다.DB에서 데이터를 정렬해서 가져올때, 일반적으로는 특정 칼럼의 오름차순/내림차순 혹은 어떤 연산을 하고 그 값을 기준으로 데이터를 정렬하는 방식을 많이 사용합니다. 하지만 경우에 따라, 실무에서 비즈니스 로직을 구현하다 보면 외부에서 이미 특정 정렬 기준을 세워놓고 해당 순서로 필드 정렬이 필요한 경우들이 있습니다. 그럴때에 MySQL에서는 Field 함수를 이용할 수 있습니다. order by field(기준 column, 값1, 값2, 값3) Spring Boot 3.0 으로 ..

개발자 포포 2024.09.07