본문 바로가기

Spring

(65)
[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..
[JPA] ApplicationContextAware 간단하게 ApplicationContextAware는 스프링 프레임워크에서 제공하는 인터페이스로, 스프링 컨텍스트에 접근할 수 있도록 해주는 기능을 제공합니다. 이 인터페이스를 구현하면 스프링 컨테이너가 관리하는 ApplicationContext 객체를 직접 사용할 수 있게 됩니다. 이를 통해 애플리케이션 전반에서 스프링 컨텍스트의 구성 요소에 접근하거나 필요한 빈을 동적으로 가져오는 등의 작업이 가능해집니다.주요 특징ApplicationContextAware 인터페이스를 구현한 클래스는 setApplicationContext(ApplicationContext applicationContext) 메서드를 오버라이딩해야 합니다.이 메서드는 스프링이 해당 클래스를 컨테이너에 등록할 때 자동으로 호출되며, 스프링 컨텍..
[JPA] ENUM 타입 JPA에서 enum 타입은 데이터베이스 컬럼에 매핑할 때 @Enumerated 어노테이션을 사용하여 처리할 수 있습니다. enum은 코드의 가독성을 높이고, 특정 값 집합을 제한하는 데 유용하기 때문에 JPA에서도 널리 사용됩니다. @Enumerated 어노테이션은 enum 필드를 데이터베이스에 저장할 때 어떤 방식으로 저장할지 결정합니다. 두 가지 주요 전략이 있습니다:1. EnumType.ORDINALenum의 순서(인덱스 값)를 저장합니다. 즉, enum의 정의된 순서에 따라 0, 1, 2와 같은 정수 값으로 저장됩니다.장점: 저장 공간이 작으며, 데이터베이스에 인덱스 값을 저장하므로 효율적일 수 있습니다.단점: enum 순서가 바뀌거나 새로운 값이 추가되면 기존 데이터가 잘못 매핑될 위험이 있습니..
[JPA] 엔티티 클래스에서 많이 사용되는 어노테이션 1. @Entity 이 어노테이션은 클래스가 JPA 엔티티임을 나타냅니다.필수 사용: 엔티티로 작동하기 위해서는 반드시 필요하며, 이를 통해 JPA가 해당 클래스를 데이터베이스의 테이블과 매핑할 수 있습니다.2. @Table데이터베이스의 특정 테이블과 매핑하기 위해 사용됩니다.옵션 속성: name (테이블 이름), schema (스키마 이름), uniqueConstraints (고유 제약 조건) 등이 있습니다.예시: @Table(name = "members")3. @Id해당 필드를 엔티티의 **기본 키(primary key)**로 지정합니다.필수 사용: 엔티티 클래스에는 반드시 하나의 @Id가 필요합니다.4. @GeneratedValue기본 키 값의 생성을 자동으로 처리하는 전략을 지정합니다.옵션 속성:..
[JPA] Paging JPA에서 **페이징(Paging)**은 대량의 데이터가 있을 때 효율적으로 데이터를 조회하고 관리하기 위해 자주 사용됩니다. 데이터베이스에서 데이터를 조회할 때 모든 결과를 한 번에 가져오는 것은 성능 상의 부담이 크기 때문에, 특정 페이지 단위로 데이터를 나눠 가져오거나, 필요한 만큼의 데이터만 가져오는 방식으로 최적화를 할 수 있습니다.Spring Data JPA는 페이징 기능을 제공하기 위해 Pageable과 Page 인터페이스를 활용합니다. 다음은 주요 개념과 사용 방법에 대한 설명입니다.주요 개념Pageable 인터페이스:페이징을 위한 정보를 담고 있는 인터페이스로, 페이지 번호, 페이지 크기(한 번에 가져올 항목 수), 정렬 기준 등을 설정할 수 있습니다.PageRequest.of(int p..
[JPA] IsEmpty와 IsNotNulLL 의 차이점 IsEmpty와 IsNotNull은 JPA에서 사용되는 조건 검사 메서드들로, 컬렉션 또는 특정 필드의 상태를 확인할 때 주로 사용됩니다. 두 메서드는 개념적으로 다음과 같은 차이점이 있습니다:IsEmpty의미: IsEmpty는 주로 컬렉션(List, Set 등)이 비어 있는지 확인할 때 사용됩니다.용도: 주로 데이터베이스에서 컬렉션이 비어 있는 경우(즉, 자식 엔터티가 없는 경우)를 찾고자 할 때 사용됩니다.예시: // 예시: orders가 비어 있는 User 엔터티를 찾는 경우List users = userRepository.findByOrdersIsEmpty();  비교 대상: IsEmpty는 컬렉션에 대해 사용되며, 단순히 값이 없는 컬렉션이나 필드(빈 상태)를 확인합니다. 2.IsNotNull의..