본문 바로가기

Spring/Spring JPA

(31)
[JPA] spring.jpa.properties.hibernate.dialect spring.jpa.properties.hibernate.dialect는 Hibernate에서 사용하는 Dialect를 지정하는 설정입니다. 이 설정은 Hibernate가 특정 데이터베이스와 상호작용할 때 적합한 SQL 문법과 기능을 사용하는 데 필요합니다. Dialect란?Dialect는 데이터베이스 벤더마다 다른 SQL 문법 및 기능을 추상화하여 Hibernate가 데이터베이스와 독립적으로 작동할 수 있게 해주는 개념입니다.예를 들어, MySQL, PostgreSQL, Oracle 등의 데이터베이스는 LIMIT, OFFSET, 쿼리 함수 등에서 서로 다른 문법을 사용합니다.Hibernate Dialect는 이런 차이를 해결하기 위해 데이터베이스별로 제공되며, 각 데이터베이스의 문법 및 최적화된 쿼리를..
[JPA] 영속성 컨텍스트(Persistence Context) 영속성 컨텍스트(Persistence Context)는 JPA에서 매우 중요한 개념으로, 엔티티(Entity) 객체를 관리하고 영속성을 유지하는 1차 캐시 역할을 하는 저장소입니다. 이를 통해 데이터베이스와 애플리케이션 간의 효율적인 상호작용을 지원합니다. 1. 영속성 컨텍스트란?JPA에서 **엔티티 매니저(EntityManager)**가 관리하는 논리적인 저장 공간.애플리케이션과 데이터베이스 사이에서 엔티티 객체를 캐싱하여 데이터 변경 및 조회를 관리. 엔티티 객체의 생명 주기(lifecycle)를 관리함.2. 엔티티의 생명 주기엔티티 객체는 다음 4가지 상태를 가질 수 있습니다: 1) 비영속(Transient)영속성 컨텍스트와 전혀 관계가 없는 상태. 단순히 new 키워드로 생성된 상태. 데이터베이스..
[JPA]@ManyToOne 필드에 @ToString.Exclude 붙이는 이유 @ManyToOne 필드에@ToString.Exclude를 붙이는 이유는 양방향 관계에서 발생할 수 있는 순환 참조(Circular Reference) 문제를 방지하기 위해서입니다.  1. 문제의 원인: 순환 참조 JPA의 양방향 매핑에서 부모-자식 관계를 가지는 두 엔티티는 서로를 참조하게 됩니다. 예를 들어, Parent는 Child 목록을 가지고 있고, Child는 다시 Parent를 참조하는 구조가 있을 수 있습니다. 이 상태에서 toString()을 호출하면, 한 엔티티의 toString()이 다른 엔티티의 toString()을 호출하는 무한 루프가 발생할 수 있습니다.@Entitypublic class Parent { @Id @GeneratedValue(strategy = Gener..
[JPA] JPA에서 관계를 매핑할 때 사용하는 어노테이션 JPA에서 관계를 매핑할 때 사용하는 어노테이션들에는 @OneToMany, @OneToOne, @ManyToOne, @ManyToMany가 있습니다. 이 어노테이션들은 엔티티 간의 관계를 정의하는 데 사용되며 데이터베이스 설계와 객체 모델 간의 연결을 제공합니다.  1. @OneToOne 의미: 두 엔티티 간의 1:1 관계를 나타냅니다.특징: - 주로 @JoinColumn을 사용해 외래 키를 설정합니다. - 양방향 관계를 설정하려면 양쪽 엔티티에 어노테이션을 추가하고 mappedBy 속성을 사용합니다.예시:@Entitypublic class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; ..
[JPA]@ToString.Exclude @ToString.Exclude는 Lombok 라이브러리에서 제공하는 어노테이션입니다. 이는 @ToString 어노테이션과 함께 사용되며, 객체를 문자열로 변환할 때(ToString 메서드 생성 시) 특정 필드를 제외하도록 설정할 수 있습니다. 주요 기능무한 순환 참조 방지:엔티티 간 양방향 관계가 있는 경우, @ToString 메서드에서 무한 순환 참조가 발생할 수 있습니다.예를 들어, A가 B를 참조하고 B가 다시 A를 참조하는 경우, toString() 호출 시 무한 루프에 빠질 수 있습니다.이 경우 @ToString.Exclude를 사용하여 순환 참조 문제를 방지합니다.필드 제외:toString() 메서드 출력에서 특정 필드를 제외할 수 있습니다.예를 들어, 비밀번호와 같은 민감한 데이터를 출력에..
[JPA] @OneToOne @OneToOne은 JPA에서 두 엔티티 간의 1:1 관계를 매핑하기 위해 사용하는 어노테이션입니다. 이는 관계형 데이터베이스의 1:1 관계를 표현하며, 두 테이블의 데이터가 서로 정확히 하나씩 연결되는 경우에 사용됩니다.주요 특징1:1 관계 매핑:각 엔티티 인스턴스는 다른 엔티티의 인스턴스와 정확히 하나씩 매핑됩니다.예를 들어, User 엔티티와 Profile 엔티티가 있을 때, 각 사용자는 하나의 프로필만 가질 수 있으며, 각 프로필은 하나의 사용자에만 속합니다.연결 방식:외래 키(Foreign Key)를 통해 연결됩니다.관계를 주도하는 "소유 측(owner side)"와 "비소유 측(non-owner side)"로 나뉩니다.지연 로딩:기본적으로 @OneToOne 관계는 FetchType.EAGER로..
[JPA] EntityListener 간단하게 EntityListener는 JPA에서 엔티티의 생명 주기에 따라 특정 이벤트가 발생했을 때 콜백 메서드를 실행할 수 있도록 돕는 기능입니다. 즉, 엔티티의 상태가 변할 때 미리 정의된 특정 작업(예: 데이터 생성/변경 시 타임스탬프 업데이트 등)을 수행할 수 있게 해줍니다.주요 기능과 사용 예시1. 주요 이벤트 종류@PrePersist: 엔티티가 영속화되기 전에 호출됩니다. (예: 엔티티가 EntityManager.persist() 메서드로 저장되기 직전)@PostPersist: 엔티티가 영속화된 후에 호출됩니다.@PreUpdate: 엔티티가 업데이트되기 전에 호출됩니다.@PostUpdate: 엔티티가 업데이트된 후에 호출됩니다.@PreRemove: 엔티티가 삭제되기 전에 호출됩니다.@PostRemov..
[JPA] @MappedSuperclass 간단하게 @MappedSuperclass는 JPA에서 사용하는 어노테이션으로, 상속 구조에서 공통된 매핑 정보를 부모 클래스에 정의할 때 사용됩니다. 이 어노테이션이 적용된 클래스는 실제로 테이블과 매핑되지 않지만, 상속받는 자식 엔티티 클래스에 매핑 정보를 제공할 수 있습니다.주요 특징@MappedSuperclass가 붙은 클래스 자체는 엔티티로서 직접 사용할 수 없으며, 테이블로도 생성되지 않습니다.공통적인 필드나 매핑 정보를 정의하는 데 유용합니다.상속받은 하위 엔티티는 이 클래스에서 정의된 필드와 매핑을 그대로 가져와 사용할 수 있습니다.사용 예시부모 클래스에 공통 필드 정의@MappedSuperclasspublic abstract class BaseEntity { @Id @GeneratedVa..