🟣 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)
@Column(name = "member_id")
private Long id;
@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;
}