Entity
- JPA에서 관리되는 객체(클래스)임.
- Entity 클래스는 DB 테이블과 매핑되서 JPA에 의해 관리됨
Entity 클래스 생성법
@Entity // JPA가 관리할 수 있는 Entity 클래스 지정
@Table(name = "memo") // 매핑할 테이블의 이름을 지정
public class Memo {
@Id
private Long id;
// nullable: null 허용 여부
// unique: 중복 허용 여부 (false 일때 중복 허용)
@Column(name = "username", nullable = false, unique = true)
private String username;
// length: 컬럼 길이 지정
@Column(name = "contents", nullable = false, length = 500)
private String contents;
}
@Entity 어노테이션 사용을 통해 JPA가 관리할 수 있는 Entity 클래스로 지정이 가능하다.
- @Entity(name=”Memo”)처럼 이름이 지정이 가능하다. 옵션 미사용시 클래스명으로 명명됨.
- JPA가 Entity를 인스턴스화 할때 기본 생성자를 사용하므로 기본 생성자가 필수임
- @Table
- 매핑 대상 테이블임. name미작성시 엔티티명으로 자동 매핑
- @Column
- name : 필드와 매핑할 테이블의 컬럼을 지정
- nullable : 데이터의 null 값 허용 여부 지정
- unique : 중복 값 허용 여부 지정
- length : 데이터의 길이에 제약
- @Id
- 테이블의 기본 키 지정
- 필수 어노테이션임
- @GeneratedValue 옵션
- 옵션 미사용시 개발자가 키를 넣어줘야함
- 옵션 사용시 기본 키 생성이 DB에 위임됨
- `@GeneratedValue(strategy = GenerationType.IDENTITY)`
- 개발자가 id를 넣어주지 않아도 자동으로 순서에 맞게 기본키가 추가됨
상태
- Transient (비영속)
- Managed (영속)
- Detached (준영속)
- Removed (삭제)
- Transient (비영속)
Memo memo = new Memo(); // 비영속 상태
- 아직 persist로 영속성 컨텍스트에 저장안됨
- Managed (영속)
em.persist(memo);
- 비영속 객체를 영속성 컨텍스트에 저장함
- Detached (준영속)
- 영속이였다가 분리된 상태
detach
- em.detach(memo);
- memo Entity는 준영속 상태로 전환됨.
clear
- em.clear();
- 영속성 컨텍스트의 모든 Entity를 준영속으로 전환함.
- 사실상 내용 초기화
close
merge(Entity)
- em.merge(memo);
- 준영속 상태를 다시 영속시킴
- DB에 해당 Entity가 없으면 생성해서 저장함
- 즉, 생성 수정 다 됨
- Removed (삭제)
em.remove(memo);
- 영속 상태의 Entity를 파라미터로 전달받아 삭제 상태로 전환함