728x90
반응형
✔ 리스너 특징
리스너(특정 이벤트를 받기 위해 대기)
이벤트 종류
//Post - `직 후` Pre = '직 전'
1. PostLoad : 엔티티가 영속성 컨텍스트에 조회된 직후
2. PrePerList : 새로운 인스턴스를 merge할 때 수행. persist() 메소드를 호출해서 엔티티를
영속성 컨텍스트에 관리하기 직전에 호출
3. PreUpdate : flush, commit를 호출해서 엔티티를 데이터베이스에 수정하기 직전에 호출
4. PreRemove : remove 메소드를 호출해서 엔티티를 영속성 컨텍스트에서 삭제하기 직전에 호출
5. PostPersist : flush, commit를 호출해서 엔티티를 데이터베이스에 저장한 직후에 호출
6. PostUpdate : flush, commit를 호출해서 엔티티를 데이터베이스에 수정하기 직후에 호출
7. PostRemove : remove 메소드를 호출해서 엔티티를 영속성 컨텍스트에서 삭제하기 직후에 호출
✔ 연관 관계 메핑
연관 관계 메핑
- 테이블간의 연관 관계가 있을 때 객체지향스럽게 사용하는 방법을 제공
- 데이터베이스에서는 외래키를 사용하지만, JPA에서는 객체를 참조하는 방식으로 연관 관계를 메핑함
@OneToOne : 하나의 엔티티가 하나의 엔티티와 연관 관계를 맺을 때 사용
@OneToMany : 하나의 엔티티가 여러개의 엔티티와 연관 관계를 맺을 때 사용
@ManyToOne : 여러개의 엔티티가 하나의 엔티티와 관계를 맺을 때 사용
@ManyToMany : 여러개의 엔티티가 여러개의 엔티티와 관계를 맺을 때 사용
FetchType
- LAZY(지연로딩)
- 참조 객체들의 데이터들을 무시하고 해당 엔티티의 데이터만을 가져오는 방법
- 참조 객체의 데이터를 사용하기 위해 여러번의 쿼리를 사용
- EAGER(즉시로딩)
- 하나의 객체를 DB로 부터 읽어올 때 참조 객체들의 데이터까지 전부 읽어오는 방식
- 한번의 쿼리로 모든 정보를 가져옴
package com.koreait.day5.model.entity;
import com.koreait.day5.model.config.Auditable;
import com.koreait.day5.model.config.BaseEntity;
import com.koreait.day5.model.enumclass.OrderType;
import lombok.*;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder // 연속적으로 실행하게 해주는 기능 ex) method.method ......
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@EntityListeners(AuditingEntityListener.class)
public class OrderGroup extends BaseEntity implements Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Enumerated(EnumType.STRING)
private OrderType orderType;
private LocalDateTime arrivalDate;
private String status;
private String revAddress;
private String revName;
private String paymentType;
private BigDecimal totalPrice;
private Integer totalQuantity;
private Long userId;
}
// @CreatedDate // 인서트시 자동으로 데이터를 넣어준다.
// private LocalDateTime regDate;
// @LastModifiedDate // 수정 시 날자를 넣어준다
// private LocalDateTime updateDate;
❗ @ CreateDate : 인서트 시 자동으로 LocalDateTime.now()를 넣어준다
❗ @ LastModifiedDate: 인서트 시 자동으로 LocalDateTime.now()를 넣어준다
✔ regDate, updateDate 선언 부
package com.koreait.day5.model.config;
import java.time.LocalDateTime;
public interface Auditable {
LocalDateTime getRegDate();
LocalDateTime getUpdateDate();
void setRegDate(LocalDateTime regDate);// 인터페이스 역할 수행
void setUpdateDate(LocalDateTime updateDate);
}
❗ @Entity : JPA를 사용해서 DB 테이블과 매핑할 클래스는 @Entity를 꼭 붙여야만 매핑이 가능합니다.
❗ @NoArgsConstructor : 파라미터가 없는 기본 생성자를 생성
❗ @AllArgsConstructor : 모든 필드 값을 파라미터로 받는 생성자를 만듬
❗ @Data : 모든 필드를 대상으로 접근자와 설정자가 자동으로 생성하고, @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode을 한꺼번에 설정
❗ @ToString : toString() 메소드를 생성해준다, 사람이 읽기 쉬운 형으로 자동 변환해주는 메소드이다.
❗ @EqualsAndHashCode : 자바 bean에서 동등성 비교를 위해 equals와 hashcode 메소드를 오버라이딩해서 사용
❗ @EntityListners : JPA Entity에 Persist, Remove, Update, Load에 대한 event 전과 후에 대한 콜백 메서드를 제공한다.
// Auditi : Spring Data JPA에서 시간에 대해서 자동으로 값을 넣어주는 기능
반응형
'Spring' 카테고리의 다른 글
Spring Main Page Project (0) | 2022.12.18 |
---|---|
Spring Join (0) | 2022.12.13 |
Spring (Enum, Query Method 기본, Optional, @Bean) (0) | 2022.12.11 |
Spring 데이터 관리(데이터 출력(모든), 삭제, 정렬, 검색, 저장, 불러오기, 존재 확인, 페이지 생성) (0) | 2022.12.09 |
Spring Added dependencies 등 간편하게 사용 (0) | 2022.12.08 |