본문 바로가기

JPA8

[JPA] CRUDRepository와 JPARepository 공부를 하다보니 CrudRepository와 JpaRepository 2개의 Repository 인터페이스에서 비슷하게 사용하는 것을 보고 차이점이 무엇인지 궁금해져서 찾아보게 되었습니다. 이 인터페이스는 둘 다 Spring Data JPA가 제공하는 인터페이스로, 두 인터페이스 모두 데이터 액세스 계층의 코드를 간결하게 만들기 위해 제공되지만, 제공하는 기능 및 상속 관계에 차이가 있습니다. 🏷️ CrudRepository@Repository public interface UserRepository extends CrudRepository { // ... }CRUDRepository는 기본 CRUD(Create, Read, Update, Delete) 작업을 지원합니다. 그래서 주로 기본 CRUD .. 2025. 4. 1.
[JPA] @PrePersist와 @PreUpdate @PrePersist@Column(name = "created_at")private LocalDateTime createdAt;@PrePersistvoid createdAt() { this.createdAt = LocalDateTime.now();} 엔티티가 생성될 때마다 실행되어야 하는 로직을 구현하는 데 사용되며, 엔티티가 생성될 때마다 현재 날짜를 값으로 설정하는 로직 등을 구현할 수 있습니다. 또한, 위의 이미지같이 JPA 엔티티(entity)가 비영속 상태에서 영속 상태가 되는 시점 이전에 실행이 되게 됩니다.@PreUpdate@Column(name = "modified_at")private LocalDateTime modifiedAt;@PreUpdatevoid modifiedAt() { .. 2024. 10. 18.
[JPA] @GeneratedValue의 GenerationType에 AUTO, IDENTITY 차이 @GeneratedValue(strategy = GenerationType.AUTO)@Table(name = "question_board")@Entitypublic class QuestionBoard { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; // 생략}Default로 동작되는 설정으로 DB 벤더에 따라 자동으로 3가지 전략 중 하나를 선택합니다. DB 벤더를 변경해도 전략을 수정하지 않아도 되지만, SEQUENCE나 TABLE 전략을 선택한다면 sequence나 키 테이블을 생성해두어야 함을 주의해야 합니다. 그러나 JPA ddl-auto 기능을 사용하면 hibernate가 알아서 시퀀스 테이블을.. 2024. 10. 17.
[JPA] N + 1 문제 N + 1 문제 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수(n) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 현상입니다. 🏷️ 예시 위와 같이 DB가 만들어져 있었을 때, EAGER(즉시 로딩)으로 한 경우와 LAZY(지연 로딩)으로 한 경우를 살펴보겠습니다. ✅ Fetch 모드를 EAGER(즉시 로딩)으로 한 경우 // User 엔티티 @Entity public class User { @Id @GeneratedValue private long id; private String firstName; private String lastName; @ManyToOne(fetch = FetchType.EAGER)// 즉시 로딩 @JoinColumn(name = "team_id.. 2024. 4. 23.
[JPA] findById와 getReferenceById 🏷️ 데이터를 가져오는 방식 ✅ findById Optional findById(ID id) ▪️ Optional: 조회된 엔티티를 Optional로 감싼 반환 타입입니다. Optional은 엔티티가 존재하지 않을 수도 있는 경우에 사용됩니다. ▪️ ID: 조회할 엔티티의 식별자(ID) 타입입니다. ▪️ 조회된 엔티티 객체를 Optional로 감싸서 반환합니다. ▪️ CrudRepository와 JpaRepository 인터페이스에서 모두 제공되는 메소드입니다 ✅ getReferenceById public T getReferenceById(ID id) ▪️ T: 반환 타입으로 엔티티의 클래스 타입입니다. ▪️ ID: 조회할 엔티티의 식별자(ID) 타입입니다. ▪️ 엔티티가 영속성 컨텍스트에 없으면 Ent.. 2024. 3. 9.
[JPA] 영속성 컨텍스트 영속성 컨텍스트영속성 컨텐스트란 엔티티를 영구 저장하는 환경이라는 뜻으로 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 합니다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리하게 됩니다.// 엔티티 매니저를 사용해 사용자 엔티티를 영속성 컨텍스트에 저장한다는 의미입니다.em.persist(user);🏷️ 특징✅ 영속성 컨텍스트 생성 시점엔티티 매니저를 생성할 때 하나 만들어집니다.✅ 영속성 컨텍스트관리엔티티 매니저를 통해서 영속성 컨텍스트에 접근하고 관리할 수 있습니다.✅ 영속성 컨텍스트의 식별자 값영속성 컨텍스트는 엔티티를 식별자 값으로 구분하기 때문에 영속 상태는 식별자 값이 반드시 있어야 합니다.✅ .. 2024. 3. 2.