일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 오라클 캐릭터셋 조회
- Oracle 18c 설치
- Oracle 18c HR
- 서평단
- Oracle 사용자명 입력
- 윈도우 Oracle
- Oracle 18c HR schema
- Oracle 테이블 띄어쓰기
- Oracle 초기 사용자
- 비전공자를 위한 데이터베이스 입문
- 오라클 캐릭터셋 확인
- Oracle 사용자명
- ORA-00922
- 무료 오라클 데이터베이스
- ORA-12899
- Orace 18c
- Oracle Express Edition
- Oracle 테이블 대소문자
- 무료 오라클 설치
- Oracle 윈도우 설치
- ora-01722
- oracle 18c
- oracle
- 오라클 캐릭터셋 변경
- Today
- Total
The Nirsa Way
[Spring Data JPA] Entity 알아보기 (필수 및 부가 어노테이션) 본문
[Spring Data JPA] Entity 알아보기 (필수 및 부가 어노테이션)
KoreaNirsa 2025. 7. 17. 09:58
JPA에서의 Entity란?
데이터베이스 테이블과 매핑되는 자바 클래스를 의미합니다. 아래의 클래스를 예로 들었을 때 member의 테이블을 가르키며 객체는 테이블의 한 행(row)를 표현할 수있습니다.
@Entity
public class Member {
@Id
private Long id;
private String name;
}
엔티티는 ORM에서 핵심 단위로 볼 수 있으며 자바와 관계형 데이터베이스간의 변환을 담당하고, 도메인 모델로써 역할을 수행하게 되며 영속성 컨텍스트의 관리 대상이 되며 일반적으로 아래와 같은 조건들을 가집니다. (영속성 컨텍스트의 라이프 싸이클 등 자세한 내용은 추후 포스팅 예정)
- 기본 생성자 필수 : JPA 내부에서 리플렉션으로 사용
- final 클래스 불가 : final을 사용하면 프록시 객체 생성이 불가하므로 금지
- 캡슐화를 위한 필드 접근자 private
- 기본키 지정 필수 : @Id 어노테이션으로 PK 지정 필요
- 순수 객체 : Controller, Service, Repository 등의 역할과 분리
즉, 엔티티는 데이터베이스 테이블을 객체로 표현한 클래스입니다.
※ 연관 관계 매핑은 추후 따로 포스팅 예정이므로 제외합니다.
필수 어노테이션 정리
1. @Entity / @Table
해당 어노테이션은 이 클래스가 JPA의 엔티티 클래스임을 정의하는 어노테이션입니다
@Entity
public class Member {
...
}
기본적으로 클래스 이름 = 테이블 이름이 되므로 다르게 지정하고 싶다면 @Table 어노테이션을 활용해야 합니다.
@Entity
@Table(name="member")
public class MemberEntity {
...
}
2. @Id
기본 키 컬럼을 지정해주는 어노테이션 이며 하나의 엔티티에는 반드시 하나의 @Id가 있어야 합니다.
@Entity
public class Member {
@Id
private Long memberId
}
3. @GeneratedValue
PK를 자동으로 생성할 때 사용되는 어노테이션으로써 종류는 크게 3가지가 있으나 전략을 명확히 지정하여 의도치 않은 동작을 방지하는 것이 좋습니다.
- (기본값) AUTO : 자동 전략 (DB에 따라 결정)
ex) MySQL은 IDENTITY, Oracle은 SEQUENCE 등 - IDENTITY : DB에서 auto_increment 사용 (MySQL 등)
- SEQUENCE : 시퀀스 객체 사용 (Oracle 등)
// (기본값) AUTO
@Entity
public class Member {
@Id
@GeneratedValue
private Long memberId
}
// IDENTITY
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long memberId
}
// SEQUENCE
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long memberId
}
4. @Column
데이터베이스의 컬럼으로 매핑할 때 작성하며 세부 설정이 가능합니다. 예를 들어 아래와 같이 사용이 가능합니다.
@Entity
public class Member {
@Id
@GeneratedValue
private Long memberId
// NULL 허용하지 않음(NOT NULL), 길이는 50자 제한(VARCHAR2(50))
@Column(name = "user_name", nullable = false, length = 50)
private String name;
}
부가적으로 사용되는 어노테이션
1. @Enumerated
Enum 타입을 DB에 어떻게 저장할 지 결정하는 어노테이션으로써 ORDINAL과 STRING이 있는데 STRING이 주로 사용됩니다.
@Entity
public class Member {
@Enumerated(EnumType.STRING)
private Role role;
}
2. @Lob
텍스트 또는 바이너리같은 대용량 데이터를 저장할 때 사용되며 CLOB, BLOB를 생각하시면 됩니다.
@Entity
public class Member {
@Lob
private String description; // CLOB
@Lob
private byte[] image; // BLOB
}
3. @Embedded, @Embeddable
하나의 객체 안에 다른 객체를 포함 시킬 때 @Embedded 어노테이션이 사용되며, 대상 클래스는 @Embeddable 어노테이션을 갖습니다.
@Entity
public class Member {
@Embedded
private Address address;
}
@Embeddable
public class Address {
private String city;
private String street;
private String zipcode;
}
4. @Transient
필드는 DB와의 매핑 제외하는 어노테이션으로써 계산, 임시 데이터 보관의 용도로 사용할 수 있습니다.
@Entity
public class Member {
@Transient
private int tempScore;
}