DB/JPA 6

[JPA] ddl-auto를 썼는데 컬럼이 삭제되지 않는 이유

문제 상황BaseTimeEntity라는 공통 상속 클래스에 id 필드가 존재Schedule이라는 엔티티 클래스에도 별도로 id 필드 존재 (이름이 다르게 설정됨)두 클래스 모두 @Id 필드 존재 → Hibernate가 각각을 다른 컬럼으로 인식이후 BaseTimeEntity의 id 필드를 제거했는데, DB에는 여전히 해당 컬럼이 존재하는 문제 발생왜 삭제가 안되지..?원인 분석🔎 Hibernate는 DDL "삭제"까지 책임지지 않는다Spring Boot에서는 보통 이렇게 ddl-auto를 설정합니다spring: jpa: hibernate: ddl-auto: update엔티티만 바꿔도 자동으로 테이블과 컬럼을 생성해준다💡 하지만, ddl-auto: update의 한계기능지원 여부새로운 ..

DB/JPA 2025.04.12

[JPA] 더티 체킹 (Dirty Checking)

더티 체킹 (Dirty Checking)JPA의 더티 체킹(Dirty Checking)이란 엔티티 객체의 변경 사항을 자동으로 감지하여 변경된 데이터만 DB에 반영하는 기능을 말합니다.이 덕분에 개발자가 update SQL을 직접 작성하지 않아도 JPA가 자동으로 변경을 감지하고 업데이트를 수행합니다.Spring Data JPA .save() 방식@Transactionalpublic void modifyClassInfo(Long classId, ClassRequest.ModifyRequestData requestData) { ClassEntity classEntity = classRepository.findById(classId).get(); // 엔티티 수정 classEntity..

DB/JPA 2025.03.13

[JPA] 기본키 생성 전략 (추가설명) (업데이트중...)

IDENTITY 전략1. 특징 - 영속성 컨텍스트에 저장되기 전에 데이터베이스에 INSERT를 실행해야 한다.JPA에서는 객체를 persist() 하면 영속성 컨텍스트(Entity Manager 내부의 1차 캐시)에 먼저 저장되지만, IDENTITY 전략을 사용하면 기본키(ID)를 생성하기 위해 즉시 데이터베이스에 INSERT 쿼리를 실행해야 한다는 제약이 있다.IDENTITY 전략은 데이터베이스가 기본키 생성을 담당하고, JPA가 직접 기본키를 생성할 수 없으므로, 엔티티를 저장하려면 먼저 데이터베이스에 INSERT를 실행해야만 기본키를 얻을 수 있다.ex. 2. 단점 - JPA의 1차 캐시 및 영속성 컨텍스트 기능을 제대로 활용하지 못할 수 있다.JPA는 엔티티를 영속성 컨텍스트(1차 캐시)에 저장한..

DB/JPA 2025.03.12

[JPA] 기본키 생성 전략

기본키(Primary Key)데이터베이스에서 기본키(Primary Key)는 각 테이블의 행을 고유하게 식별하는 값이다.기본키는 중복될 수 없으며, 한 테이블에서 단 하나만 존재해야 한다.JPA(Java Persistence API)에서 엔티티(Entity)의 데이터를 데이터베이스에 저장할 때도 기본키가 반드시 필요하다.JPA에서 기본키를 생성하는 방법JPA에서는 기본키를 자동으로 생성할 수 있도록 4가지 기본키 생성 전략을 제공한다.IDENTITYSEQUENCETABLEAUTOIDENTITY 전략1. 특징데이터베이스가 기본키 생성을 담당하는 방식이다.AUTO_INCREMENT 기능이 있는 MySQL, MariaDB 등에서 주로 사용된다.@GeneratedValue(strategy = Generation..

DB/JPA 2025.03.03

[JPA] BaseEntity

BaseEntitySpring Data JPA와 같은 ORM(Object-Relational Mapping) 프레임워크에서, @Entity로 선언된 클래스들은 데이터베이스의 테이블과 매핑됩니다.이때, 모든 엔티티에서 공통적으로 사용되는 속성과 로직을 BaseEntity에 정의하고, 다른 엔티티가 이를 상속받아 사용하는 방식이 일반적입니다.주로 객체 지향 프로그래밍에서 데이터베이스와 매핑되는 엔티티 클래스들을 작성할 때 공통 속성 및 로직을 포함하는 부모 클래스 역할을 합니다.예시 @Getter@EqualsAndHashCode(onlyExplicitlyIncluded = true)@MappedSuperclasspublic class BaseEntity { @Id @GeneratedValue(st..

DB/JPA 2025.02.28

[JPA] Enity Annotation

@Entity @Entity는 JPA에서 이 클래스가 데이터베이스 테이블과 매핑되는 객체임을 나타냅니다.@Entitypublic class User { ...}@Table Entity 클래스가 매핑될 데이터베이스 테이블의 이름을 지정합니다. 이 Annotation은 선택사항으로, 생략하면 기본적으로 클래스 이름을 테이블 이름으로 사용합니다.@Entity@Table(name = "users")public class User { @Id private Long id; private String name; private String email;}User 클래스는 데이터베이스의 users 테이블에 매핑됩니다.@Id  @Id 데이터베이스 테이블의 기본 키(Primary Key)를 정의합니..

DB/JPA 2024.12.19
반응형