[Database] JPA Entity에 대해 알아보자

박정현·2023년 9월 27일
0

🌿스프링부트 기능

목록 보기
11/12
post-thumbnail

🟣 Entity

(1) Entity란?

  • 한 마디로 DB테이블이라고 생각하면 됨
  • 세로열이 Column이고 가로행이 엔티티 객체가 됨
  • DB테이블에 대응하는 하나의 클래스
  • @Entity가 붙은 클래스는 JPA가 DB테이블과 매핑할 클래스
  • 다른 클래스와 의존관계를 주입(DI)해야 하므로 기본 생성자가 필수힘
  • final클래스, enum, interface, inner클래스에는 사용이 불가능
  • 저장할 필드에 final사용불가

(2) @Entity 속성

  • @Entity
    • 매핑할 테이블 이름이 member_entity로 생성된다. (JPA에 자동으로 테이블 이름생성)
    • 만약 테이블 이름을 변경하고 싶다면 @Entity(name = "")으로 설정한다.
    • 혹은 @Table(name = "") 이렇게 설정할 수 있다.
  • @Id: 기본키를 의미, 필수로 들어가야 한다.
  • @GeneratedValue
    • 자동으로 1씩 증가
    • IDENTITY: MySQL에서 사용하는 auto_increment
    • SEQUENCE: oracle에서 사용하는 sequence
    • AUTO: 자동으로 선택됨
  • @Column : 필드를 의미한다.
    • name: 실제 테이블의 칼럼영을 지정
    • nullable: null을 허용?
      • nullable = true: null값 허용
      • nullable = false : null 허용X (not null)
    • unique = true : 유니크 설정
    • 생성, 수정 시간은 다음과 같이 설정만 하면 JPA가 알아서 해줌
      • updatable = false : 수정할 때 X
      • insertable = false : 처음 생성 시간 X
  • @CreationTimestamp
    • 시간설정
  • @ManyToOne :
    • 해당 엔티티와 다른 엔티티를 관계짓고 싶을 때 쓰는 어노테이션이다.
    • ManyToOne이라고 부르는 이유는 Writer 입장에서 Board는 여러 개가 될 수 있기 때문에 Writer : Board = 1 : N 관계가 되기 때문이다.

(3) 예제

@Builder
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Entity
@Table(name = "member_tb_04") // 실제 테이블명
public class MemberEntity {

    @Id  // 기본키
    @GeneratedValue(strategy = GenerationType.IDENTITY) //auto_increment
    @Column(name = "member_id")
    private Long id; // entity<->dto로 변경하기 때문에 여기서 사용하는 변수는 Dto와 동일해야 한다. )form데이터도 동일)

    @Column(name = "member_name", nullable = false)
    private String name;

    @Column(name = "member_email", nullable = false, unique = true)
    private String email;

    // 기본 필수 시간들
    @CreationTimestamp
    @Column(updatable = false)
    private LocalDateTime createTime; // 가입일자

    @CreationTimestamp
    @Column(insertable = false)
    private LocalDateTime updateTime; // 수정일자

    // Dto -> Entity (전체적인 이해 그림확인)
}
profile
개발을 개발괴발하지 않기 위한 노력

0개의 댓글