@NoArgsConstructor
@Entity
public class Posts {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(length = 500, nullable = false)
private String title;
@Column(columnDefinition = "TEXT", nullable = false)
private String content;
private String author;
@Builder
public Posts(String title, String content, String author) {
this.title = title;
this.content = content;
this.author = author;
}
}
@Entity
- 테이블과 링크될 클래스
- 기본값으로 클래스의 카멜케이스 이름을 언더스코어 네이밍으로 테이블 이름을 매칭
- (eg. SalesManager → sales_manager)
@Id
- 해당 테이블의 PK 필드
@GeneratedValue
- PK의 생성 규칙을 나타냅니다.
- 스프링 부트 2.0 에서는 GenerationType.IDENTITY 옵션을 추가해야만 auto_increment 적용
@Column
- 테이블의 칼럼을 나타내며 굳이 선언하지 않더라도 해당 클래스의 필드는 모두 컬럼을 의미
- 기본값 외에 추가로 변경 필요한 옵션이 있을시 사용
- 문자열의 경우 VARCHAR(255)가 기본값
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime modifiedDate;
}
@MappedSuperclass
- JPA Entity 클래스들이 BaseTimeEntity를 상속할 경우 필드들(cratedDate, modifiedDate)도 칼럼으로 인식되도록 설정
@EntityListneres(AuditingEntityListener.class)
- BaseTimeEntity 클래스에 Auditing 기능을 포함
@CreatedDate
- Entity가 생성되어 저장될 때 시간 자동 저장
@LastModifiedDate
- 조회한 Entity의 값을 변경할 때 시간 자동 저장
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private Role role;
@Enumerated(EnumType.String)
- JPA로 데이터베이스로 저장할 때 Enum 값을 어떤 형태로 저장할지 결정
- 기본적으로는 int로 된 숫자 저장
- 숫자로 저장되면 데이터베이스로 확인할 때 그 값이 무슨 코드를 의미하는지 알수 없기에 String으로 저장
'SPRING' 카테고리의 다른 글
Custom Annotation 기반으로 Session 정보 가져오기 (0) | 2023.05.02 |
---|---|
Spring 웹 계층 (0) | 2023.04.24 |
Lombok Annontation (0) | 2023.04.06 |
단위 테스트 (0) | 2023.04.06 |
ERROR [builder 8/8] RUN ./gradlew bootJar (0) | 2023.01.02 |