728x90
01. @Entity
@Entity
란?
@Entity
가 붙은 클래스는 JPA가 관리한다.- JPA로 테이블과 매핑할 클래스는
@Entity
를 꼭! 붙여야 한다.
@Entity
사용 시 주의할 점
- 파라미터가 없고 접근 지정자는 public 혹은 protected인 기본 생성자가 필수로 있어야 한다.
- final 클래스, inner 클래스, enum, interface 에 사용하면 안된다.
- 저장할 필드에 final을 사용하면 안된다.
@Entity
의 속성 name
- JPA에서 사용할 엔티티 이름을 지정한다.
- 기본값은 클래스 이름을 그대로 사용하는 것이다.
- 같은 클래스 이름이 없으면 가급적 기본값을 사용하는 것이 좋다.
02. @Table
@Table
이란?
엔티티와 매핑할 테이블을 지정하는 것이다.
@Table
의 속성
- 참고로 name 속성의 기본값은 엔티티 이름을 사용하는 것이다.
속성 | 기능 |
name | 테이블 명 지정 |
catalog | 카탈로그 지정 |
schema | 스키마 지정 |
uniqueConstraints(DDL) | 제약조건 명시 |
03. 예시 코드
@Entity
예제 코드 - Member 클래스
- @Entity를 이용해 이 클래스가 JPA에서 관리될 것을 명시했다.
- 별도로 이름을 지정해주지 않았기 때문에 엔티티의 이름은 기본값은 해당 클래스의 이름인 Member로 지정된다
package hellojpa;
import javax.persistence.*;
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Member {
@Id
private Long id;
private String name;
}
@Entity
예제 코드 - JpaMain 클래스
- id가 1이고 name이 first인 하나의 멤버를 만들어 저장하는 코드이다.
- 실행 로그의 쿼리문을 보면, 엔티티 이름으로 Member가 사용된 것을 볼 수 있다.
package hellojpa;
import javax.persistence.*;
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Member member = new Member(1L, "first");
em.persist(member);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
}
}
@Table
예제 코드
- 다음과 같이 작성한다. 나머지 Member 클래스와 JpaMain 코드는 위와 동일하다.
@Table
로 name을 MBR로 지정해주면 DB의 MBR라는 테이블과 Member 객체를 매핑하겠다는 뜻이다.- 실행 로그의 쿼리문을 보면 위에서는
Member
였던 부분이MBR
로 바뀐 것을 볼 수 있다.
// Member 클래스의 선언 위에
@Table(name = "MBR")
// JpaMain 클래스의 Member 객체 삽입 하는 부분 코드 수정 (같은 PK로 값을 넣을 경우 오류 발생하기 때문! 혹은 1L 레코드를 지우는 방법도 있다.)
Member member = new Member(2L, "second");
다음과 같이 정리할 수 있다.
Annotation | Description |
@Entity, @Table | 객체와 테이블 매핑 |
@Column | 필드와 컬럼 매핑 |
@Id | 기본 키 매핑 |
@ManyToOne, @JoinColumn | 연관관계 매핑 |
728x90