Entity

김나영·2023년 6월 27일
0

Spring

목록 보기
7/38

  • JPA에서 관리되는 클래스 즉, 객체

  • DB 테이블과 매핑되어 JPA에 의해 관리됨

@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") : Entity 클래스 이름을 지정할 수 있음 (default: 클래스명)
    • JPA가 Entity 클래스를 인스턴스화 할 때 기본 생성자를 사용하기 때문에 반드시 현재 Entity 클래스에서 기본 생성자가 생성되고 있는지 확인
  • @Table : 매핑할 테이블을 지정

    • @Table(name = "memo") : 매핑할 테이블의 이름을 지정할 수 있음 (default: Entity 명)
  • @Column

    • @Column(name = "username") : 필드와 매핑할 테이블의 컬럼을 지정 (default: 객체의 필드명)
    • @Column(nullable = false) : 데이터의 null 값 허용 여부를 지정 (default: true)
    • @Column(unique = true) : 데이터의 중복 값 허용 여부를 지정 (default: false)
    • @Column(length = 500) : 데이터 값(문자)의 길이에 제약조건을 걸 수 있음 (default: 255)
  • @Id : 테이블의 기본 키를 지정

    • 이 기본 키는 영속성 컨텍스트에서 Entity를 구분하고 관리할 때 사용되는 식별자 역할을 수행

      • 따라서 기본 키 즉, 식별자 값을 넣어주지 않고 저장하면 오류가 발생
    • @Id 옵션만 설정하면 기본 키 값을 개발자가 직접 확인하고 넣어줘야 하는 불편함이 발생

  • @GeneratedValue 옵션을 추가하면 기본 키 생성을 DB에 위임할 수 있음

@GeneratedValue(strategy = GenerationType.IDENTITY)
  • id bigint not null auto_increment : auto_increment 조건이 추가됨

  • 해당 옵션을 추가해주면 개발자가 직접 id 값을 넣어주지 않아도 자동으로 순서에 맞게 기본 키가 추가됨


상태

1. 비영속(Transient)

Memo memo = new Memo(); // 비영속 상태
memo.setId(1L);
memo.setUsername("Robbie");
memo.setContents("비영속과 영속 상태");
  • new 연산자를 통해 인스턴스화 된 Entity 객체

  • 아직 영속성 컨텍스트에 저장되지 않았기 때문에 JPA의 관리를 받지 않음

2. 영속(Managed)

  • persist(entity)

    • 비영속 Entity를 EntityManager를 통해 영속성 컨텍스트에 저장하여 관리되고 있는 상태로 만듦

3. 준영속(Detached)

  • 영속성 컨텍스트에 저장되어 관리되다가 분리된 상태

4. 삭제(Removed)

  • remove(entity)

    • 삭제하기 위해 조회해온 영속의 상태의 Entity를 파라미터로 전달받아 삭제 상태로 전환

0개의 댓글