728x90
반응형
SMALL
스프링 부트에서 데이터 베이스와 상호 작용하기 위한 다양한 어노테이션들이 제공됩니다.
이번 포스팅에서 어떤 어노테이션이 있고 어떻게 사용하는지 알아보겠습니다.
엔티티 관련 어노테이션
- @Entity : JPA를 사용해 테이블과 매핑할 클래스에 적용하고 데이터 베이스 테이블과 매핑됩니다.
* 기본 생성자 필수!
@Entity(name = "member_user") public class Member {}
- @Table : 엔티티와 매핑할 테이블을 정의합니다.
속성 | 기능 |
name | 매핑할 테이블 이름 |
catalog | catalog 기능이 있는 DB에서 catalog 매핑 |
schema | schema 기능이 있는 DB에서 schema 매핑 |
uniqueContraints | DDL 생성시 유니크 제약조건 생성 |
@Entity
@Table(name = "member_user")
public class Member {}
- @Id : 엔티티 클래스의 기본 키 필드입니다.
@Entity
@Table(name = "member_user")
public class Member {
@Id
private Long member;
}
- @GeneratedValue : 기본 키 값을 자동으로 생성하는 방법을 지정합니다. 주로 자동증가할때 사용
속성 | 기능 |
strategy = GenerationType.IDENTITY | 기본 키 생성을 DB에 위임 (MySQL) |
strategy = GenerationType.SEQUENCE | DB시퀀스를 사용해서 기본 키 할당 (Oracle) |
strategy = GenerationType.TABLE | 키 생성 테이블 사용 (모든 DB) |
strategy = GenerationType.AUTO | 선택된 DB에 따라 자동으로 전략 선택 |
@Entity
@Table(name = "member_user")
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long member_number;
}
- @Column : 엔티티 클래스의 필드와 데이터베이스 간의 매핑을 정의. 열의 이름, 데이터 타입, 길이 등을 지정합니다.
속성 | 기능 |
name | 필드와 매핑할 테이블의 컬럼 이름 지정 |
insertable | true : 엔티티 저장시 필드 값 저장 false : 필드 값이 저장되지 않음 |
updatable | true : 엔티티 저장시 필드 값 수정 false : 필드 값이 수정되지 않음 |
unique | 컬럼에 유니크 제약 조건 설정 |
columnDefinition | 데이터 베이스 컬럼 정보를 직접 부여 |
length | string 사용할때 문자 길이 제약 조건 |
precision | BigDecimal 타입에서 사용 소수점을 포함한 전체 자릿수 설정 |
scale | BigDecimal 타입에서 사용 소수의 자릿수 설정 |
nullable | null값 허용 여부 false : not null 제약 조건 |
//name
@Column(name = "first_name")
private String firstName;
//insertable
@Column(name = "created_at", insertable = false)
private Date createdAt;
//updatable
@Column(name = "first_name", updatable = false)
private String firstName;
//unique
@Column(unique = true)
private String email;
//nullable
@Column(nullable = false)
private String name;
//length
@Column(length = 100)
private String description;
//precision & scale
@Column(precision = 8, scale = 2)
private BigDecimal price;
//columnDefinition
@Column(columnDefinition = "NUMERIC(10,2)")
private BigDecimal price;
- @Access : JPA가 엔티티 데이터에 접근하는 방식을 지정합니다.
접근 방식 | 기능 |
AccessType.FILED | 필드에 직접 접근. private도 접근 가능 |
AccessType.PROPERTY | getter를 통해 접근 |
※ @Access를 설정하지 않으면 @Id 기준으로 접근 방식 설정
@Entity
@Table(name = "member_user")
@Access(AccessType.FILED)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long member_number;
}
PROPERTY로 설정하면 꼭 getter, setter를 만들거나 @Data를 사용합니다.
@Entity
@Table(name = "member_user")
@Data
@Access(AccessType.PROPERTY)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long member_number;
}
- @Enumrated : JPA에서 enum필드를 데이텁 베이스 column과 어떻게 매핑할지 지정하는 사용합니다.
속성 | 기능 |
EnumType.ORDINAL | enum 순서를 DB에 저장 |
EnumType.STRING | enum이름을 DB에 저장 |
//enum 클래스
public enum RoleType{
ADMIN, USER
}
@Entity
@Table(name = "member_user")
@Access(AccessType.FILED)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long member_number;
@Enumerated(value = EnumType.ORDINAL)
private RoleType ordinal;
@Enumerated(value = EnumType.STRING)
private RoleType string;
}
- @Transient : 객체를 값을 임시로 보관하고 싶을 때 사용. DB에 저장하지도 조회하지도 않습니다.
//enum 클래스
public enum RoleType{
ADMIN, USER
}
@Entity
@Table(name = "member_user")
@Access(AccessType.FILED)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long member_number;
@Enumerated(value = EnumType.ORDINAL)
private RoleType ordinal;
@Enumerated(value = EnumType.STRING)
private RoleType string;
@Transient
private String test;
}
728x90
반응형
LIST
'Study' 카테고리의 다른 글
[Spring Boot] DB관련 어노테이션 (3) - Spring Data JPA, JPQL (0) | 2023.10.26 |
---|---|
[Spring Boot] DB관련 어노테이션 (2) - 연관 관계 (0) | 2023.10.26 |
프로세스(Process)와 스레드(Thread) (0) | 2023.10.20 |
[DB] RDBMS vs NoSQL (0) | 2023.10.18 |
Lombok 사용하기 (0) | 2023.10.17 |