본문 바로가기

spring data jpa4

양방향 @OneToOne 문제점과 해결 방법 양방향 @OneToOne 연관관계의 문제점 필자는 Spring Data JPA를 사용할 때, 양방향 @OneToOne 연관관계를 사용하는 걸 굉장히 불편해했다. 왜냐하면 부모 엔터티에서 조회하는 쿼리를 발생시키면, 자식 엔터티와 @OneToOne의 FetchType이 LAZY 연관관계 상태로 설정했음에도 불구하고, 자동으로 자식 엔터티를 SELECT 하는 추가 SQL문이 발생했기 때문이다. 해당 문제점 때문에 부모 엔터티만 필요한 경우에도 자식 엔터티를 가져오면서 리소스 낭비와 성능 저하를 초래했다. 그래서 어쩔 수 없이 양방향 @OneToOne 연관관계가 필요할 때, 비즈니스 로직을 고려해서 최대한 호출이 되지 않을 만한 쪽을 부모 엔터티로 설정하려고 했다. 원인 지연 로딩으로 설정해도 항상 즉시 로딩.. 2024. 10. 30.
@ManyToOne 연관관계에서 부모 엔터티를 등록할 때 프록시 호출을 통해 JPA 최적화 하기 @ManyToOne 연관관계에서 findById()와 getOne()은 JPA(Java Persistence API)에서 엔티티를 조회할 때 사용하는 메서드이다. 이 두 메서드는 각각 다른 방식으로 엔티티를 조회하며, 사용하는 경우도 다르다. 두 메서드의 차이점과 사용 예시 및 최적화 방법에 대해 알아보자.findById() 특징내부적으로 EntityManager의 find()를 사용하며 영속성 컨텍스트, 2차 캐시, DB로 순서로 엔터티를 반환한다. 해당 메서드를 호출하는 경우 SELECT 쿼리가 발생한다. 1. 즉시 로딩 (Eager Loading)findById()는 즉시 데이터베이스 쿼리를 실행하여 엔티티를 조회한다. 데이터베이스에서 해당 엔티티를 즉시 가져오기 때문에, 반환된 객체는 완전히 초기.. 2024. 10. 22.
JPA 효과적인 양방향 연관관계 구성방법 양방향 @OneToMany 연관관계는 JPA(Java Persistence API)에서 부모 엔티티와 자식 엔티티 간의 일대다 관계를 설정할 때 사용된다. 이 관계를 효과적으로 구성하기 위해서는 여러 가지 고려사항이 있다.1. 부모 측에서 전이 옵션을 사용해야 한다.전이(cascading)는 항상 부모 엔티티가 자식 엔티티의 생명주기를 관리하도록 한다. 예를 들어, 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장되도록 하려면 CascadeType.ALL 또는 필요한 전이 타입을 설정해야 한다. @Entitypublic class Parent { @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true) pr.. 2024. 10. 16.
[JPA] PK가 아닌 필드에 Auto Increment 사용하기 ✍ 배경 PK를 String으로 사용하는 테이블이 있는데, 별도 필드에 AUTO INCREMENT를 적용해야 하는 경우가 생기게 되었다. 흔하지 않은 상황이지만 JPA를 사용할 때 이런 경우 어떻게 해결해야 할지 찾아본 내용을 공유하고자 한다. 🔎 테스트 환경 - MariaDB 10.6 - HeidiSQL - Spring Boot 2.7.2 MySQL/MariaDB 외에 다른 데이터베이스를 사용하는 경우는 해당 방식이 적용되지 않을 수 있다는 점을 알아뒀으면 좋겠다. 하지만 방식은 거의 유사할거라고 생각한다. 🔎 공통 필자가 찾아낸 방식은 2 가지 인데, 이 방식들은 모두 공통적으로 처리해야 하는 부분이 있었다. 1. 데이터베이스에 시퀀스를 무조건 등록해야한다. create sequence SHIBA_S.. 2023. 12. 9.