@Entity
@Table(name = "ARTICLES")
public class Article {
enum ArticleStatus { WRITING, WROTE }
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ARTICLE_ID")
private Long id;
@ManyToOne
@JoinColumn(name = "AUTHOR_ID")
@OnDelete(action = OnDeleteAction.CASCADE)
private User author;
@Column(name = "TITLE", length = 100, nullable = false)
private String title;
@Column(name = "CONTENTS")
@Lob
private String contents;
@Enumerated(EnumType.STRING)
@Column(name="STATUS")
private ArticleStatus articleStatus;
public Article() {
}
// ...
}
@Entity
어노테이션이 붙은 클래스는 JPA가 관리하는 클래스로, 해당 클래스를 엔티티라고 부른다. JPA를 사용하여 테이블과 매핑해야할 클래스는 반드시 @Entity
를 선언해야한다.
final, enum, interface, inner
클래스는 엔티티가 될 수 없다.final
을 선언할 수 없다.@Entity(name = "ARTICLE")
엔티티와 매핑할 테이블을 지정한다.
기본키(Primary Key)를 지정한다.
기본키를 생성하는 방법을 지정한다.
@Id
어노테이션과 같이 선언된다.@SequenceGenerator
, @TableGenerator
에서 명시된 기본키 생성기 이름GenerationType.AUTO
: 방언에 따라 나머지 세 가지 전략을 자동으로 지정한다.(기본값)GenerationType.IDENTITY
: 기본 키 생성을 데이터베이스에 위임한다.GenerationType.SEQUENCE
: 데이터베이스 Sequence Object를 사용한다.@SequenceGenerator
가 필요하다.GenerationType.TABLE
: 키 생성 전용 테이블 하나를 만들어 데이터베이스 Sequence 를 흉내내는 전략@TableGenerator
가 필요하다.Column을 매핑한다.
@Column(columnDefinition = "varchar(100) default 'EMPTY'")
constraint UK_ewkrjwel239flskdfj01 unique (name)
와 같이 이름을 랜덤으로 만든다.@Column(updatable = false)
시 변경되어도 DB에 반영되지 않는다.조인을 하고 있는 컬럼을 매핑한다.
@Column
과 속성은 동일하다.ManyToOne, OneToMany, OneToOne, JoinTable, CollectionTable, ForeignKey
어노테이션과 주로 같이 사용한다.데이터베이스에서 VARCHAR보다 큰 데이터를 담고 싶을 때 사용한다.
Enum 타입을 매핑할 때 사용한다.(DB에는 Enum 타입이 없다.)
EnumType.ORDINAL
: enum 순서를 데이터베이스에 저장한다.(기본값)EnumType.STRING
: enum 이름을 데이터베이스에 저장한다.