Whiteship's Note

기본 속성 맵핑하기

Hibernate/Chapter 4 : 2008.01.20 13:35


특징

  • @Transient 애노테이션을 붙이거나 자바의 transient 키워드를 사용하지 않으면 기본으로 전부 Persistent 대상으로 인식한다.
  • 애노테이션을 붙이지 않으면 다음과 같은 규칙이 적용된다.
    • JDK가 제공하는 타입일 경우에 자동으로 Persistent 대상이 된다.
    • 그렇지 않고, 속성의 타입에 해당하는 클래스에 @Embeddable 애노테이션이 붙어있는 경우, 컴포넌트를 가지고 있는 형태로 맵핑된다.
    • 그렇지도 않고, 속성의 타입이 Serializable 인터페이스를 구현한 경우, 직렬화된 형태로 DB에 저장된다. (이러길 원치 않을 것이다.)

설정하기

  • Chapter 17에서 하이버네이트 애노테이션으로 DDL을 작성하거나 동적으로 검증하는 기능에 대해 다룬다.
  • 클래스 속성에 접근하는 방법은 @Id 애노테이션이 붙어있는 위치가 기본 방법으로 설정 된다.(JPA)
  • 하이버네이트는 이 기본 방법을 변경할 수 있는 기능을 제공한다. @org.hibernate.annotations.AccessType(<strategy>)
    • 클래스에 AccessType 애노테이션을 사용하면, @Id로 인해 설정되는 접근 전략을 무시하며, 해당 클래스의 필드나 메서드에 붙어있는 모든 애노테이션들은 AccessType에서 정의한 접근 전략을 따른다.
    • 기본 상태이거나 필드 접근인 상태에서 @AccessType("property")를 필드 위에 붙여주면, 해당 속성을 accessor 메소드들을 이용해서 접근한다.
    • 기본 상태이거나 Accessor 접근이 상태에서 @AccessType("field")를 getter 위에 붙여주면, 해당 속성은 필드에 바로 접근한다.
    • @Embedded 클래스는 자신을 가지고 있는 쪽 클래스의 접근 방법을 따른다.
    • @MappedSuperclass 클래스는 맵핑 된 클래스의 접근 방법을 따른다.
  • noop 방식: "virtual" property in HQL queries. to use the database column in HQL queries only.
  • 마음에 드는게 없으면 org.hibernate.property.PropertyAccessor 인터페이스 구현해서 직접 만들어 됨.
    • 사용할 때는 @AccessType 애노테이션의 access 속성에 패키지 이름을 붙인 클래스 이름을 써주면 돼.

계산이 필요한 속성

  • 맵핑되는 컬럼은 없다.
  • @Fomula 애노테이션 사용하기
필드에서 계산된 속성 사용하기
@org.hibernate.annotations.Formula("TOTAL + TAX_RATE * TOTAL")
public BigDecimal getTotalIncludingTax() {
return totalIncludingTax;
}
  • SQL 함수도 사용할 수 있다.

h1, DB에서 생성된 값과 기본 값

  • public 세터를 만들지 말아라.
  • @Generated 애노테이션 사용하기
DB에서 생성된 값 사용하기
@Column(updatable = false, insertable = false)
@org.hibernate.annotations.Generated(
org.hibernate.annotations.GenerationTime.ALWAYS
)
private Date lastModified;
  • 기본값이 설정되도록 하려면 flush 해야한다.
  • columnDefinition 속성으로 기본값 설정하기
기본값 설정하기
@Column(name = "INITIAL_PRICE",
columnDefinition = "number(10,2) default '1'")
@org.hibernate.annotations.Generated(
org.hibernate.annotations.GenerationTime.INSERT
)
private BigDecimal initalPrice;
  • columnDefinition: complete properties for the column DDL, with datatype and all constraints.
    • DDL customization은 8장에서 다룬다.

모르는 것

  • @MappedSuperclass는 뭔가?

'Hibernate > Chapter 4' 카테고리의 다른 글

기본 속성 맵핑하기- 실습  (2) 2008.01.22
Hibernate VS JPA  (2) 2008.01.20
컴포넌트 맵핑하기  (0) 2008.01.20
기본 속성 맵핑하기  (2) 2008.01.20
작명 지침 사용하기  (0) 2008.01.20
SQL문에 따옴표 사용하기  (0) 2008.01.20
패키지 이름 설정하기  (0) 2008.01.20
쿼리에서 사용할 Entity 이름 설정하기  (0) 2008.01.20
Immutable Entity 만들기  (0) 2008.01.20
동적 SQL 생성  (0) 2008.01.20
주키 정하기  (0) 2008.01.14
top