본문 바로가기

전체 글

(93)
[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로..
[JAVA]원시 타입(primitive type)과 래퍼 클래스(wrapper class) 주요 차이점원시 타입 (Primitive type)과 래퍼 클래스 (Wrapper class)int와 float은 Java의 원시 타입(primitive type)입니다. 메모리에서 더 가볍고, 직접 값만 저장합니다.Integer와 Float은 원시 타입을 감싸는 래퍼 클래스입니다. Java에서 객체로 다루어질 수 있으며, 컬렉션 프레임워크(List, Set 등)에 사용될 수 있습니다.기본 값int와 float의 기본값은 각각 0과 0.0f입니다.Integer와 Float의 기본값은 null일 수 있습니다. (객체이므로 초기화되지 않으면 null을 가질 수 있습니다.)메서드 제공 여부Integer와 Float은 클래스이므로 다양한 유틸리티 메서드(parseInt(), toString(), compare(..
[JAVA] 메서드, 생성자, 클래스, 필드, 객체, 매개변수(Parameter), 인자(Argument), 리턴 타입 1. 메서드 (Method)정의: 클래스 안에서 특정 작업을 수행하는 코드 블록입니다.역할: 객체가 수행할 수 있는 행동이나 동작을 정의합니다. 예를 들어, 데이터를 처리하거나 특정 기능을 수행할 때 사용됩니다.구성요소:메서드 이름: 메서드가 호출될 때 사용됩니다.매개변수(인자): 메서드가 호출될 때 전달받는 값(옵션).반환 타입: 메서드가 리턴하는 값의 타입. 반환값이 없으면 void로 선언합니다.예시:public int add(int a, int b) { return a + b;}2. 생성자 (Constructor)정의: 객체가 생성될 때 호출되는 특수한 메서드로, 객체의 초기화를 담당합니다.특징:생성자의 이름은 클래스 이름과 동일해야 합니다.반환 타입이 없으며, void를 명시하지 않습니다.기..
[JPA] EntityListener 간단하게 EntityListener는 JPA에서 엔티티의 생명 주기에 따라 특정 이벤트가 발생했을 때 콜백 메서드를 실행할 수 있도록 돕는 기능입니다. 즉, 엔티티의 상태가 변할 때 미리 정의된 특정 작업(예: 데이터 생성/변경 시 타임스탬프 업데이트 등)을 수행할 수 있게 해줍니다.주요 기능과 사용 예시1. 주요 이벤트 종류@PrePersist: 엔티티가 영속화되기 전에 호출됩니다. (예: 엔티티가 EntityManager.persist() 메서드로 저장되기 직전)@PostPersist: 엔티티가 영속화된 후에 호출됩니다.@PreUpdate: 엔티티가 업데이트되기 전에 호출됩니다.@PostUpdate: 엔티티가 업데이트된 후에 호출됩니다.@PreRemove: 엔티티가 삭제되기 전에 호출됩니다.@PostRemov..
[JPA] @MappedSuperclass 간단하게 @MappedSuperclass는 JPA에서 사용하는 어노테이션으로, 상속 구조에서 공통된 매핑 정보를 부모 클래스에 정의할 때 사용됩니다. 이 어노테이션이 적용된 클래스는 실제로 테이블과 매핑되지 않지만, 상속받는 자식 엔티티 클래스에 매핑 정보를 제공할 수 있습니다.주요 특징@MappedSuperclass가 붙은 클래스 자체는 엔티티로서 직접 사용할 수 없으며, 테이블로도 생성되지 않습니다.공통적인 필드나 매핑 정보를 정의하는 데 유용합니다.상속받은 하위 엔티티는 이 클래스에서 정의된 필드와 매핑을 그대로 가져와 사용할 수 있습니다.사용 예시부모 클래스에 공통 필드 정의@MappedSuperclasspublic abstract class BaseEntity { @Id @GeneratedVa..