기본 키

사용 가능

@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에 익숙해지는 것입니다.

코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다