Spring Data

    JPA 생성 및 수정 날짜 자동 처리를 위한 공통 엔티티 만들기 @MappedSuperclass, @EnableJpaAuditing

    JPA 생성 및 수정 날짜 자동 처리를 위한 공통 엔티티 만들기 @MappedSuperclass, @EnableJpaAuditing

    서비스를 만들때 많은 엔티티가 생성일과 수정일을 가지고 있습니다. 이러한 필드를 각각의 엔티티마다 중복으로 작성하는 것은 번거로울 뿐 아니라 유지보수도 복잡해지고 가독성도 떨어집니다. 때문에 우리는 공통으로 갖고 있는 정보(생성일과 수정일)를 따로 엔티티로 만들어 상속받게 만들어보겠습니다. @MappedSuperclass JPA에서 상속 관계 매핑을 위해 사용되는 어노테이션입니다. 이 어노테이션을 사용하면 공통된 매핑 정보를 가진 부모 클래스를 정의할 수 있고, 여러 엔티티에서 공통 필드와 매핑 정보를 상속받아 사용할 수 있습니다. `@MappedSuperclass` 어노테이션이 붙은 부모 클래스를 자식 엔티티가 상속받게 되면, 부모 클래스는 테이블로 생성되지 않고, 상속한 자식 클래스로 테이블이 생성됩..

    JPA ddl-auto: 데이터베이스 스키마 자동 생성 전략

    JPA ddl-auto: 데이터베이스 스키마 자동 생성 전략

    1. `create`: 새로 생성 어플리케이션을 실행할 때마다 기존 데이터는 삭제하고, 데이터베이스 스키마를 새로 생성하는 전략입니다. spring.jpa.hibernate.ddl-auto=create 2. `create-drop`: 종료할 때 삭제 데이터베이스 스키마가 새로 생성된다는 점에서는 create 전략과 같지만, create-drop은 어플리케이션이 종료될 때 데이터베이스 스키마도 삭제됩니다. spring.jpa.hibernate.ddl-auto=create-drop 3. `update`: 변경된 내용만 반영 데이터베이스 스키마에 영향을주지 않고, 엔티티 클래스의 변경사항만을 반영합니다. 즉, 데이터베이스 스키마는이미 존재하는 상태에서엔티티 클래스의 변경을반영합니다. spring.jpa.hib..

    JPA 엔티티 매핑: 객체와 데이터베이스 테이블의 매핑

    JPA 엔티티 매핑: 객체와 데이터베이스 테이블의 매핑

    엔티티(Entity) 매핑 JPA 엔티티 매핑은 다음과 같은 주요 어노테이션과 개념을 활용하여 이루어집니다. 객체와 테이블 매핑: @Entity, @Table 기본 키 매핑: @Id, @GeneratedValue 필드와 컬럼 매핑: @Column 연관 관계 매핑: @JoinColumn, @ManyToOne, @ManyToMany 등 상속 관계 매핑: @Inheritance, @DiscriminatorColumn, @DiscriminatorValue @Entity 엔티티 클래스임을 지정하여 JPA에게 알려줍니다. 기본 생성자가 필요합니다. 저장할 필드에 `final`을 사용하면 안 됩니다. final 클래스, enum, interface, inner 클래스에는 사용할 수 없습니다. @Table 엔티티와 매..

    JPA EntityManager와 영속성: JPA의 데이터 관리 이해

    JPA EntityManager와 영속성: JPA의 데이터 관리 이해

    엔티티(Entity 객체) 엔티티는 데이터베이스의테이블과 매핑되는 클래스입니다. @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String email; // Getter, Setter, Constructor, Methods... } User 클래스에 `@Entity` 어노테이션을 사용하여 엔티티로 지정해줍니다. 그럼 해당 엔티티는 데이터베이스의 User 테이블과 매핑되며, 객체의 속성과 테이블의 컬럼 간의 매핑이 이루어집니다. JPA 엔티티 매핑 속성 자세히 보기 엔티티 매니저(JPA EntityManager) J..

    JPA: 자바 ORM 표준

    JPA: 자바 ORM 표준

    JPA: 자바 표준의 ORM JPA는 자바 표준의 ORM으로 객체 지향 프로그래밍과 관계형 데이터베이스 간의 간극을 줄이기 위한 기술입니다. 프로그래밍 언어(Java)는 객체지향 언어이고, SQL은 객체지향이 아니기 때문에 객체를 RDB에 저장할 때 개념적으로 불일치가 발생합니다. ORM(Object-Relation Mapping)을 통해 개발자가 클래스를 작성하면 테이블 간의 매핑을 통해 객체를 데이터베이스에 저장하고 조회할 수 있고, 객체 지향적인 방식으로 데이터베이스를 조작할 수가 있습니다. 이를 통해 객체와 데이터베이스 간의 변환 작업도 최소화되며 개발자는 비즈니스 로직에 집중할 수 있게 됩니다. JPA(Java Persistence API)는 ORM의 핵심 원칙을 구현한 Java 표준입니다. 자..

    QueryDSL 페이징 처리

    QueryDSL 페이징 처리

    바로 전 포스팅인 https://yeo-computerclass.tistory.com/413에서 작성한 코드에 이어 페이징 처리를 실습해보겠습니다. Querydsl 페이지 연동 QueryDSL Custom Repository 인터페이스에 페이지 추가 public interface MemberRepositoryCustom { List search(MemberSearchCondition condition); Page searchPage(MemberSearchCondition condition, Pageable pageable); } searchPage() public Page searchPageSimple(MemberSearchCondition condition, Pageable pageable) { Lis..

    QueryDSL Spring Data JPA + 동적 쿼리

    QueryDSL Spring Data JPA + 동적 쿼리

    Repository 작성 Repository 구성 MemberRepository public interface MemberRepository extends JpaRepository, MemberRepositoryCustom{ // select m from Member m where m.username = ? List findByUsername(String username); } MemberRepositoryCustom public interface MemberRepositoryCustom { List search(MemberSearchCondition condition); } Query DSL로 만들 동적 쿼리인 search 메서드 MemberTeamDto 조회할 Member와Team 정보를 추출하기 위..

    QueryDSL 벌크 쿼리

    QueryDSL 벌크 쿼리

    벌크 연산 한 번에 여러 데이터를 수정 혹은 삭제하는 것을 의미합니다. 영속성 컨텍스트를 무시하고 바로 DB에 반영합니다. 영속성 컨텍스트와 DB의 상태가 달라지게 된다는 의미 벌크 연산으로 대량의 데이터를 수정한 후 fetch()로 데이터를 조회했을 때 변경된 DB에서 값이 아닌 이미 영속성 컨텍스트에 존재하는 데이터를 가져오는 문제가 발생합니다. 벌크 연산 이후 변경된 값을 가져오기 위해 EntityManager.flush()와 EntityManager.clear()를 통해서 영속성 컨텍스트 값을 버려야 합니다. 대량 데이터 수정 // 20살보다 어리면 비회원으로 변경하기 long count = jpaQueryFactory .update(member) .set(member.username, "비회원"..