[JPA] @Entity
13 Jun 2022해당 포스트는 인프런 김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 듣고 정리한 글입니다.
@Entity
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/* JPA가 사용하는 Entity 설정 */
@Entity
/* entity의 테이블 명명 */
//@Table(name = "USER")
/* JPA(영속성 컨텍스트)가 접근하기 위해서는 빈 생성자가 필요하다
* 접근제어자는 public 외에 아무거나 줘도 상관이없지만, 캡슐화를 위해 PROTECTED를 권장 */
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Member {
/* 테이블의 ID 컬럼 설정 */
@Id
private Long id;
/* 해당 변수의 컬럼명 매칭 */
// @Column(name = "username")
private String name;
public Member(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
엔티티 매핑 소개
- 객체와 테이블 매핑 : @Entity, @Table
- 필드와 컬럼 매핑 : @Column
- 기본 키 매핑 : @Id
- 연관관계 매핑 : @ManyToOne, @JoinColumn
@Entity
- @Entity가 붙은 크래스는 JPA가 관리, 엔티티라 한다.
- JPA를 사용해서 테이블과 매핑할 클래스 @Entity 필수
- 주의
- 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) 그래서
@NoArgsConstructor(access = AccessLevel.PROTECTED)
를 사용한다. - final 클래스, enum, interface, inner 클래스 사용X
- 저장할 필드에 final 사용하지 않는다.
- 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) 그래서
@Entity 속성 정리
- 속성 : name
- JPA에서 사용할 엔티티 이름을 지정한다.
- 기본값 : 클래스 이름을 그대로 사용(예 : Member)
- 같은 클래스 이름이 없으면 가급적 기본값을 사용한다.
@Table
-
@Table은 엔티티와 매핑할 테이블 지정
- name : 매핑할 테이블 이름 (기본값으로 엔티티 이름을 사용)
- catalog : 데이터베이스 catalog 매핑
- schema : 데이터베이스 schema 매핑
- uniqueConstraints(DDL) : DDL 생성 시에 유니크 제약 조건 생성