SQL문에 따옴표 사용하기

특징

  • Hibernate doesn’t quote table and column names in the generated SQL.
  • 대소문자를 구분하거나, 특수 문자를 사용하는 기존 DB의 경우 하이버네이트가 자동으로 생성하는 컬럼이나 테이블이름을 인식하지 못할 수도 있다.

설정하기

역따옴표 사용하기
<property name="description"
column="`DESCRIPTION`"/>
  • If you quote a table or column name with backticks in the
    mapping document, Hibernate always quotes this identifier in the
    generated SQL.
  • 애노테이션에서도 설정할 수 있으나, 하이버네이트 @Column 애노테이션을 사용하야 한다. JPA에서는 지원하지 않는다.

패키지 이름 설정하기

특징

  • (XML 설정 파일 이용 시)
  • Persistent 클래스 등록할 때, 패키지 이름까지 붙어있는 이름을 등록해야 한다.
  • 같은 패키지에 위치한 여러 클래스들을 등록할 때 패키지 이름을 매번 붙여주기가 귀찮다.

설정하기

기본 패키지 설정하기
<hibernate-mapping package="auction.model">
<classname="Item" table="ITEM">
...
</class>
</hibernate-mapping>
  • 애노테이션에서는 이런 설정이 필요 없겠지. 해당 클래스에 가서 직접 붙여주는데…

쿼리에서 사용할 Entity 이름 설정하기

특징

  • 기본으로 모든 클래스 이름들이 자동으로 HQL의 네임스페이스로 import 된다.
  • 즉, HQL에서 패키지 이름을 제외한 클래스 이름을 사용할 수 있다.
  • 서로 다른 패키지에 같은 이름의 클래스가 존재한다면, auto-import를 끄거나, 명시적으로 네임스페이스를 설정해야 한다.

설정하기

HQL에서 사용할 네임스페이스 설정하기
@Entity(name="AuctionItem")
public class Item {

}

모르는 것

  • 애노테이션을 사용해서 auto-import를 끄는 방법은?
  • auto-import를 끄면 패키지 이름이 붙어있는 클래스 이름을 네임스페이스로 사용하는 건가?

Immutable Entity 만들기

특징

  • 변하지 않아야 할 Persistent 객체가 있을 수 있다.
  • 이런 Persistent 클래스에는 필드로 직접 접근하도록 설정하고, accessor 메소드들을 만들지 않으면 된다.

설정하기

immutable entity 설정하기
@Entity
@org.hibernate.annotations.Entity(mutable=false)
@org.hibernate.annotations.AccessType("field")
public class Bid {

}
  • @AccessType은 하이버네이트가 Pesistent 클래스에 접근하는 방법을 표시한다.
  • 클래스, 메소드, 필드 위에 붙여서 좀 더 세밀한 설정이 가능하다.

동적 SQL 생성

특징

  • 기본으로 하이버네이트가 시작할 때, 각각의 Persistent 클래스와 관련된 CRUD 쿼리를 생성한다.
  • UPDATE 문은 모든 필드를 수정하도록 작성되어 있다.
  • Sometimes you can avoid generating any UPDATE statement, if the persistent class is mapped immutable.

설정하기

동적으로 쿼리 생성하도록 설정
@Entity
@org.hibernate.annotations.Entity(dynamicInsert=true, dynamicUpdate=true)
public class Category {
...
}
  • 아래에 있는 하이버네이트의 Entity 애노테이션이 위에 있는 Entity를 확장한다.