본문 바로가기
반응형

JPA4

[JPA] Spring 에서 JPA 사용하기 JPA 개념에 대해서는 이해하고 있다고 가정을 하고 이번 글에서는 JPA 의 기본 사용법에 대해 알아보고자 한다. 의존성 추가 아래 의존성을 추가해주자. dependencies { implementation("org.springframework.boot:spring-boot-starter-data-jpa") // JPA 의존성 testImplementation("org.springframework.boot:spring-boot-starter-test") // 테스트를 위한 의존성 runtimeOnly("com.h2database:h2") // 테스트를 위한 의존성 } 도메인 객체 생성 예시로 상품 (Product) 에 대한 객체를 생성해보자. 간단하게 id, name, description 3개의 필드만.. 2023. 2. 11.
[JPA] @ManyToOne, @OneToMany 를 활용하기 이 어노테이션들은 언제 사용하는거지? 스프링에서 1:N 관계의 테이블을 엮어야 할 때 사용하게 된다. 예시 Order (주문) 엔티티와 OrderItem (주문 아이템) 엔티티는 @OneToMany, @ManyToOne 어노테이션을 활용하여 서로 1:N 관계로 묶여 있다. 주문 1개에 N 개의 상품이 존재할 수 있다. 엔티티 구현 Order (주문) @Entity @Table(name="orders") public class Order { @Id @Column(name="order_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany( cascade = CascadeType.ALL, mappedBy = "o.. 2023. 2. 10.
[JPA] @EnableJpaAuditing 활용하기 데이터를 생성하거나 수정할 때, 누가, 언제 해당 작업을 했는지 알기 위해 보통 아래와 같은 필드를 공통으로 각 테이블에 포함 시켜 테이블을 설계한다. createdAt (생성일자) modifiedAt (수정일자) createdBy (생성자) modifiedBy (수정자) 생성 일자와 생성자는 테이블에 신규 레코드(row)가 생길 때마다 입력되어야 하고 수정 일자와 수정자는 특정 row 가 업데이트될 때마다 반영되어야 한다. 그냥 구현한다면? 가장 간단한 방법으로는 생성자 또는 setter 메소드를 활용하여 직접 값을 설정하면 된다. @Table(name = members) @Entity public class Member { ... @Column private Datetime createdAt; @Co.. 2023. 2. 3.
[JPA] @OrderBy 두 개의 Entity 가 @OneToMany, @ManyToOne 어노테이션을 활용하여 1:N 관계로 맵핑이 되어 있는 경우에 JPA 로 부모 Entity 를 조회하게 되면 자식 Entity 들도 알아서 조회가 된다. 매번 부모 Entity 기준으로만 조회를 했었어서 함께 조회되는 자식 Entity 에 대해서는 크게 신경을 쓰지 않았었다. 그런데 조회한 자식 Entity 를 최신순으로 정렬해야 하는 필요성이 생겨서 고민을 하다가 @OrderBy 라는 어노테이션으로 해결한 케이스를 적어본다. 생각보다 간단했다. 문제 상황 1:N 관계의 두 개의 Entity 가 존재한다. 부모 Entity 는 Product 이고, 자식 Entity 는 ProductHistory 이다. @Entity public class .. 2023. 2. 3.
반응형