@Id 주석
Hibernate의 각 Entity 엔터티는 기본 키가 될 필드를 가져야 합니다. 이 필드에는 이 클래스의 모든 개체에 대한 고유한 값이 포함됩니다. 일반적으로 이 필드에는 @Id 주석이 추가됩니다 .
일반 형식:
@Id
Class Name;
예:
@Entity
@Table(name="user")
class User
{
@Id
@Column(name="id")
public Integer id;
@Embedded
public UserAddress address;
@Column(name="created_date")
public Date createdDate;
}
주석 배치
그건 그렇고, 필드뿐만 아니라 메소드(게터 또는 세터)에 대해서도 @Column 주석을 작성할 수 있습니다. 예:
@Entity
@Table(name="user")
class User
{
public Integer id;
public Date createdDate;
@Id
@Column(name="id")
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="created_date")
public Date getDate() {
return this.createdDate;
}
public void setCreatedDate(Date date) {
this. createdDate = date;
}
}
이 접근 방식은 주석이 클래스뿐만 아니라 인터페이스에도 추가되기 시작했을 때 나타났습니다. 인터페이스에는 클래스 필드가 없지만 getter 및 setter 메서드가 있습니다. Hibernate는 이 두 표준을 모두 지원합니다.
중요한! 클래스에 @Entity 주석이 있으면 모든 필드가 Hibernate에 의해 영속 필드로 처리됩니다( @Transient 주석이 지정되지 않은 경우 ). 필드에 주석이 전혀 없는 경우에도: 이 경우 열 이름은 클래스 필드 이름과 동일한 것으로 간주됩니다.
여기서 @Id 주석이 중요한 역할을 합니다. 주석이 클래스 필드에 배치되면 Hibernate는 필드의 이름과 유형을 볼 것입니다. @Id 주석이 메소드에 배치 되면 Hibernate는 메소드의 이름과 유형을 볼 것입니다.
예 1:
@Entity
@Table(name="user")
class User
{
@Id
public Integer id;
public Date createdDate; //this field will be treated as if it had @Column(name=" createdDate ")
}
예 2:
@Entity
@Table(name="user")
class User
{
public Integer id;
public Date createdDate;
@Id
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public Date getDate() { //this field will be treated as if it had @Column(name=”date ”)
return this.createdDate;
}
public void setCreatedDate(Date date) {
this. createdDate = date;
}
}
@GeneratedValue 주석
새 개체에 ID를 직접 할당하거나 Hibernate의 자비에 맡길 수 있습니다. Hibernate가 객체에 ID를 할당하는 방법을 더 잘 이해하기 위해 특별한 주석이 있습니다.
@GeneratedValue
이 주석은 일반적으로 @Id 주석 과 동일한 필드를 표시합니다 . 그녀는 4가지 가능한 ID 할당 전략이 있습니다.
- 자동
- 신원
- 순서
- 테이블
지정된 전략이 있는 주석의 예:
@Entity
@Table(name="user")
class User
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer id;
public Date createdDate;
}
정책 값을 지정하지 않으면 AUTO 전략이 선택됩니다. AUTO 전략은 Hibernate가 주로 ID 필드의 데이터 유형을 기반으로 ID 자체를 할당한다는 것을 의미합니다.
왜 유형에? 예, ID 유형은 문자열 또는 GUID와 같이 매우 다를 수 있기 때문입니다. 예:
@Entity
@Table(name="user")
class User
{
@Id
@GeneratedValue
public UUID id;
public Date createdDate;
}
참고: Java의 GUID는 전통적으로 UUID라고 합니다. 그리고 Hibernate는 요청하는 경우 개체에 대한 고유한 UUID를 생성할 수 있습니다.
다양한 @GeneratedValue 전략
GeneratedValue(strategy = GenerationType.IDENTITY) 유형을 지정하면 Hibernate는 ID 설정을 데이터베이스 계층에 위임합니다. 일반적으로 PRIMARY KEY, AUTOINCREMENT라는 레이블이 지정된 열을 사용합니다.
그러나 ID가 고유하고 특별히 지정된 알고리즘에 따라 생성되기를 원하는 경우 GeneratedValue(strategy = GenerationType.SEQUENCE) 주석 을 사용할 수 있습니다 . 예를 들면 다음과 같습니다.
@Entity
@Table(name="user")
public class User {
@Id
@GeneratedValue(generator = "sequence-generator")
@GenericGenerator(
name = "sequence-generator",
strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
parameters = {
@Parameter(name = "sequence_name", value = "user_sequence"),
@Parameter(name = "initial_value", value = "4"),
@Parameter(name = "increment_size", value = "1")
}
)
private long userId;
// ...
}
ID를 생성하는 더 많은 방법이 있습니다. 예를 들어 여러 열로 구성된 복합 고유 키가 있을 수 있습니다. 그리고 데이터베이스에 개체를 쓸 때 이러한 열을 모두 채워야 합니다.
자세히 설명하지 않겠습니다. 그래도 우리 강의의 목적은 공식 문서를 다시 말하는 것이 아니라 Hibernate에 익숙해지는 것입니다.
GO TO FULL VERSION