1
2
3
4
5
6
7
8
9
10
11
@Entity
@Table(name = "Members")
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "member_name") //컬럼명이 다를경우 @Column을 사용
private String name;
private String password; //같을 경우 생략가능
}
@Entity
- 이 클래스를 테이블과 매핑한다고 JPA에게 알리는 어노테이션
@Table
- 엔티티 클래스에 매핑할 테이블 정보를 알려주는 어노테이션
- usage : name = “테이블명”
@Id
- 엔티티 클랫의 필드를 테이블의 기본 키에 매핑하는 어노테이션
@Column
- 필드를 컬럼에 매핍하는 어노테이션
- usage : name = “컬럼 명”
- 만약 필드명과 컬럼명이 일치하면 명시적으로 생략해도 된다.
@GeneratedValue(starategy = GenerationType.*)
- IDENTITY 기본키 생성을 데이터베이스에 위임한다. 즉 @Id값을 null로 하면 DB에서 AUTO_INCREMENT를 해서 자동으로 id값을 넣어주게된다. ex) MySQL
- AUTO_INCREMENT는 INSERT 쿼리 실행이후 id값을 설정하기 때문에 영속성 컨텍스트의 1차에서 관리불가하다. 그렇기 때문에 IDENTITY의 경우 EntityManager.persist() 를 하는 시점에서 INSERT SQL을 실행하기 때문에 식별자를 조회하여 영속성 컨텍스트의 1차 캐시에 값을 넣는다.
- AUTO 기본 설정 값으로 각 데이터베이스에 맞게 자동으로 기본키를 생성해준다.
- SEQUENCE 데이터 베이스 Sequence Object를 사용하여 데이터베이스가 자동으로 기본키를 설정하는데 @SequenceGenerator 어노테이션을 필수로 넣어야한다. ex)Oracle
- TABLE 키 생성 전용 테이블을 하나 만들어 사용하는 방식으로 @TableGenerator 를 필요로 하고 Sequence 와 유사하다.
자세한 내용은 추후 다루도록 하겠다.
@IdClass
Pk값을 여러개 가지고 있을경우 사용하는 어노테이션으로 각각 @Id 어노테이션을 주는 방식도 있지만 오류가 발생할수 있기때문에 @IdClass를 쓰는 것을 권장한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Entity
@Getter
@Setter
@IdClass(Class.Pk.class)
public class Class {
@Id
@Column(name = "student_id")
private Integer studentId;
@Id
@Column(name = "subject_code")
private String subjectCode;
private String comment;
public static class Pk{
@Column(name = "student_id")
private Integer studentId;
@Column(name = "subject_code")
private String subjectCode;
}
}
위의 코드와 같이 @Id 어노테이션을 붙여 평소와 똑같이 만들고 추가적으로 Pk 클래스를 만들어 @IdClass 어노테이션에 Pk 정보가 들어있는 클래스를 넣어주면 된다.
@EmbeddedId / @Embeddable
@IdClass와 같이 복합 Pk를 처리하는 방식으로 코드는 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Entity
@Getter
@Setter
public class Class {
@EmbeddedId
private Pk pk;
private String comment;
@Embeddable
public static class Pk{
@Column(name = "student_id")
private Integer studentId;
@Column(name = "subject_code")
private String subjectCode;
}
}
Pk 정보가 들어있는 클래스에 @Embeddable을 붙이고 클래스안에 @EmbeddedId Pk 정보가 들어있는 클래스를 선언해주면 된다.