* 엔티티 애너테이션
엔티티 클래스
데이터베이스 테이블에 매핑되는 객체.
해당 테이블의 데이터 구조를 표현
실제 데이터베이스 CRUD 로직은 리포지토리 계층에서 처리
애너테이션 목록
1. @Entity : 엔티티로 등록
2. @Table : 매핑 테이블 지정
3. @Id : 기본 키로 지정
4. @IdClass : 기본 키로 여러 속성을 쓸 때 사용
5. @GeneratedValue : 기본키 생성 방법 지정
6. @Column : 매핑 속성 지정
7. @ManyToOne : 다대일 관계 명시
8. @OneToMany : 일대다 관계 명시
9. @ManyToMany : 다대다 관계 명시
10. @OneToOne : 일대일 관계 명시
11. @JoinColumn : 외래키 명시
12. @Enumerated : Enum 타입 지정
13. @Embedded : 복합값을 쓸 때 사용
14. @Version : 낙관적 락 처리
..~~~~..
* 클래스에 사용하는 애너테이션
@Entity
해당 클래스를 엔티티로 등록
@Table(name = "테이블명")
해당 클래스를 명시한 테이블명과 매핑
@IdClass
기본 키 클래스를 사용할 때 명시
..~~~~..
* 기본키 관련 애너테이션
@Id
필드를 기본 키로 지정
기본키가 여러개인 경우 -> 기본 키 클래스를 만들어야 함
@GeneratedValue
기본 키 생성 방법 정의
사용 형식은
@GeneratedValue(strategy = GenerationType.방식, generator = "객체명 or 테이블명")
generator은 SEQUENCE, TABLE 방식일 떄만 사용
방식 종류는
1. IDENTITY : 기본 키 자동 증가 방식. generator는 사용 x
2. SEQUENCE : 시퀀스 객체를 통해 기본 키 생성. generator에 시퀀스 객체명 사용
3. AUTO : 자동 선택. JPA 구현체에 따라 자동 선택됨. generator은 사용 x
4. TABLE : 테이블 기반으로 기본키 생성. 기본 키 관리 테이블을 사용한다. generator에 테이블명 명시
자동 생성 키의 경우 엔티티 객체를 만들 때
생성자에 해당 필드의 값을 null 혹은 0을 넣어줘야 한다
그러면 스프링 데이터 JPA가 알아서 값을 채워줌
..~~~~..
* 복합 기본 키 사용 (composite primary key)
기본 키가 여러개일 때 사용
순서는
1. 복합 기본 키 클래스 만들기. 이름은 보통 엔티티명Id.class ex) GroupId.class
2. 복합 기본 키 클래스로 Serializable 상속. implements Serializable
3. 복합 기본 키 클래스에 사용 복합 키 정의. ex) private int userId, private int groupId
4. 복합 기본 키 클래스에 @EqualsAndHashCode 적용
5. 엔티티 클래스에 @IdClass 적용 ex) @IdClass(GroupId.class)
다만 JPA는 복합키 각각에 @GeneratedValue를 적용하는 것을 지원하지 않음
-> uuid, 시퀀스 직접 제어 등을 사용
ex)
Group 엔티티가 userId, groupId를 복합 기본 키로 사용하는 경우
@EqualsAndHashCode
class GroupId implements Serializable {
private int userId;
private int groupId;
}
@Entity
@IdClass(GroupId.class)
class Group {
@Id
@Column(...)
private int userId;
@Id
@Column(...)
private int groupId;
}
..~~~~..
* 필드 관련 애너테이션
@Column
필드와 매핑될 속성 지정
매개변수는
1. name = "속성명"
2. length = int 값
3. nullable = boolean 값
4. unique = boolean 값
ex)
@Column(name = "group_key", length = 100, nullable = false, unique = true)
@JoinColumn
외래키 지정
매개변수는
1. name = "외래키명"
2. referencedColumnName = "참조되는 속성"
ex)
@JoinColumn(name = "user_id", referencedColumnName = "user_id)
@Enumerated
Enum 타입 지정
매개변수는
1. EnumType.ORDINAL : 순서 값 사용
2. EnumType.STRING : 이름 값 저장
@Embedded
복합 값을 하나의 객체로 정의하고 엔티티에서 사용
@Version
낙관적 락을 처리하기 위한 버전 필드 정의 (Optimistic Locking)
데이터베이스에서 여러 사용자가 동시에 데이터를 수정할 때, 충돌을 방지하기 위한 버전 필드
..~~~~..
* 엔티티 생성자
엔티티 클래스는 반드시 기본 생성자가 있어야 함
스프링 데이터 JPA가 프록시 생성을 하기 위해서
..~~~~..
'프로그래밍 > 백엔드 스프링부트' 카테고리의 다른 글
MySQL (맥북) (0) | 2025.07.04 |
---|---|
스프링부트 설정파일 (1) | 2025.07.04 |
DAO와 DTO (0) | 2025.05.02 |
도메인 모델 (0) | 2025.05.02 |
리포지토리 계층 (0) | 2025.05.02 |