728x90
반응형
package com.example.jpa.jpademo.Entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.springframework.stereotype.Component;
import javax.persistence.*;
import java.time.LocalDateTime;
@Entity //JPA가 관리
@Table(name = "member") //테이블 매핑을 위한 어노테이션
@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
@DynamicInsert // null인 값을 insert할 때 제외함
@DynamicUpdate // null인 값을 update할 떄 제외함
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) //AI 옵션 자동으로 증가
private int id;
@Column(name = "name", nullable = false, unique = true)
private String name;
@Column(name = "age", nullable = false)
private int age;
@Column(name = "dept", nullable = false)
private String dept;
@Column(name = "register_date", columnDefinition = "datetime DEFAULT CURRENT_TIMESTAMP")
private LocalDateTime register_date;
@Transient // db에 반영되지 않는 값.
private String Transient;
public Member(String name, int age, String dept) {
this.name = name;
this.age = age;
this.dept = dept;
}
}
일단 앞서 언급한 것처럼 @Entity 어노테이션이 붙은 클래스는 JPA가 관리하는 객체로 분류되므로,
@Entity를 추가.
@DynamicInsert
@DynamicUpdate
이 두 가지 어노테이션은 객체를 저장, 수정할 때 null인 값은 제외하고 넣는 옵션이다.
멤버를 등록할 때, register_date는 직접 넣지 않을 것이라, 추가했다.
@Column(name = "name", nullable = false, unique = true)
private String name;
name은 매핑시킬 컬럼의 이름을 적어주고 nullable은 not null조건이다.
false면 not null조건이 채택이 된 것이고, default는 true기 때문에 null값이 들어갈 수 있다.
unique는 unique 조건이다.
테이블에 유일한 값이 들어가야하는 조건이다.
@Column(name = "register_date", columnDefinition = "datetime DEFAULT CURRENT_TIMESTAMP")
columnDefinition은 칼럼을 정의할 수 있다.
어노테이션에 정의한 대로 하이버네이트가 SQL을 잘 로깅했고,
앞서 정의한
@DynamicInsert
@DynamicUpdate
두 어노테이션 덕에 멤버 객체에 시간을 넣지 않아도 자동으로 들어간다.
그 외에 옵션으로
insertable = false, updatable = false
위 옵션도 가능하다.
두 항목은 넣을 수 없고, 업데이트가 안되도록 조건을 건다.
Transient는 DB에 영향을 받지않는 메모리에서 사용할 값을 의미한다.
메인 메서드에 간단하게 저장 로직을 추가했다.
Member객체에 register_date가 없다.
DB를 확인해보면 값이 잘 들어갔다.
728x90
728x90
'Java' 카테고리의 다른 글
JPA 시작하기 (0) | 2022.03.08 |
---|---|
Java]메서드 오버로딩말고 파라미터를 여러개 받아보자. (0) | 2022.02.23 |
JAVA]배열,ArrayList,List 스트림 정렬 및 타입 변환 방법 정리 (0) | 2022.02.19 |
Java 회전된 문자열인지 확인하기 (0) | 2022.01.30 |
Log4j 보안 이슈 (0) | 2021.12.13 |
댓글