디자인너 코딩하기

Entity 본문

spring/Entity

Entity

designercoding 2022. 4. 18. 19:47

Entity는 도메인 객체를 말한다.

 

스프링에서 Entity 객체로 만들어 주는 방법은 @Entity 넣어주면 된다.

그럼 스프링이 Entity로 자동 관리 해준다.

주의 할 사항은 @Entity를 넣어주면 레코드를 유일하게 식별해주는 PK(Primary Key)가 반드시 만들어야 줘야 하고

그 방법은 PK해당 필드에 @Id, @GeneratedValue를 넣어주면 된다.

 

@Entity
public class User {
  @Id
  @GeneratedValue
  private Long id;
  private String name;
  private String email;
}

@GeneratedValue strategy() 옵셥

디폴드로 AUTO로 되어 있다. 생략가능

 

IDENTITY

  • my-sql 디비에서 사용하는 전략 가장 많이 사용
  • 트랜지션이 종료되기 전에 Insert문이 실행 되어 아이디 값은 사전에 받아온다.
  • 커밋되지 않아도 아이디 값을 받아와서 빈 아이디 값이 증가한다

SEQUENCE

  • SEQUENCE함수를 제공하는 Oracle, postgre, H2 등에 사용

TABLE

  • 디비에 상관없이 아이디값을 관리하는 Table를 만들어 관리

AUTO

  • 각 디비에 적합한 값을 자동으로 넘겨준다.

 

@Table

스프링이 자동으로 클래스 이름으로 디비와 1:1 매칭시키지만

테이블의 이름이나 카달로그 스키마를 변경할 때 사용(이전작업 및 마이그레이션)

@Entity
@Table(name = "user")
public class User_01 {
  @Id
  @GeneratedValue
  private Long id;
  private String name;
  private String email;
}
@Entity
@Table(name = "user", indexes = {@Index(columnList = "name")}, uniqueConstraints = {@UniqueConstraint(columnNames = {"email"})})
public class User_01 {
  @Id
  @GeneratedValue
  private Long id;
  private String name;
  @Column(unique = true)
  private String email;
}

실제로 사용과 다를 수 있다 보통 제약사항은 디비에 맡기고 사용하지 않는다

 


@Column(name="변경할 이름")

필드에 이름을 지정하는 어노테이션

사용하면 가독성이 떨어진다

@Entity
public class User_01 {
  @Id
  @GeneratedValue
  private Long id;
  private String name;
  @Column(name="em")
  private String email;
}

@Column(nullable = false) → 필드의 값을 not null 값으로 만들어 준다

테스트용으로 많이 사용함

@Entity
public class User_01 {
  @Id
  @GeneratedValue
  private Long id;
  private String name;
  @Column(nullable = false)
  private String email;
}

 

@Column(updatable = false) → 업데이트(수정)할 때는 사용하지 않는 필드

@Column(insertable = false) → 생성(입력)할 때는 사용하지 않는 필드

@Entity
public class User_01 {
  @Id
  @GeneratedValue
  private Long id;
  private String name;
  @Column(nullable = false)
  private String email;
  @Column(updatable = false)
  private LocalDateTime createdAt;
  @Column(insertable = false)
  private LocalDateTime updatedAt;
}

@Transient 테스트 등의 용도로 DB에 반영되지 않는다

@Entity
public class User_01 {
  @Id
  @GeneratedValue
  private Long id;
  private String name;
  private String email;
  @Transient
  private String testField;
}

@Enumerated(value = EnumType.STRING)

enum를 사용시 ORDINAL(제로베이스 넘버타입)이므로 enum에 필드가 추가 되면 예상하지 못한 값으로 출력하므로

반드시 STRING으로 한다

@Entity
public class User_01 {
  @Id
  @GeneratedValue
  private Long id;
  private String name;
  private String email;
  @Enumerated(value = EnumType.STRING)
  private Gender gender;
}
반응형

'spring > Entity' 카테고리의 다른 글

SprignBoot H2DB 설정  (0) 2022.04.21
Entity Listener - ②  (0) 2022.04.19
Entity Listener - ①  (0) 2022.04.19