Whiteship's Note

기본 속성 맵핑하기- 실습

Hibernate/Chapter 4 : 2008.01.22 09:41


기본값 설정하는 방법을 테스트합니다.
- @Column의 columnDefinition 속성을 사용해서 column을 만들 때 사용할 공식을 사용할 수 있습니다.
- 하이버의 @GenerationTime 애노테이션을 사용해서 기본값이나 생성되는 값을 언제 생성할 지 설정할 수 있습니다.

1. 테스트 코드

    @Test
    public void add() throws Exception {
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        Member member = new Member();
        member.setName("썬");

        session.save(member);
        session.flush();

        transaction.rollback();
        session.close();
        assertNotNull(member.getId());
        assertEquals(new Integer(1), member.getDefaultNum());
    }

2. 결과 쿼리

Hibernate: select hibernate_sequence.nextval from dual
Hibernate: insert into Member (name, id) values (?, ?)
Hibernate: select member_.defaultNum as defaultNum0_ from Member member_ where member_.id=?

3. Persistent Class

@Entity
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String name;

    @Column(columnDefinition = "number(10,2) default '1'")
    @org.hibernate.annotations.Generated(org.hibernate.annotations.GenerationTime.INSERT)
    private Integer defaultNum;

    ...

}

위 테스트 코드에서 flush를 하지 않으면 시퀀스만 가져오고 insertion은 이뤄지지 않습니다. insertion을 안하기 때문에 db가 생성하는 기본값을 가져오기 위해 발생하는 세번째 쿼리도 실행하지 않습니다. 따라서 다음의 SQL 한 문장만 실행합니다.

Hibernate: select hibernate_sequence.nextval from dual

참조 : 4.4.1 Mapping basic properties/Generated and default property values




'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




: 1 : 2 : 3 : 4 : 5 : ··· : 11 :