기본 속성 맵핑하기- 실습
기본값 설정하는 방법을 테스트합니다.
- @Column의 columnDefinition 속성을 사용해서 column을 만들 때 사용할 공식을 사용할 수 있습니다.
- 하이버의 @GenerationTime 애노테이션을 사용해서 기본값이나 생성되는 값을 언제 생성할 지 설정할 수 있습니다.
1. 테스트 코드
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: insert into Member (name, id) values (?, ?)
Hibernate: select member_.defaultNum as defaultNum0_ from Member member_ where member_.id=?
3. Persistent Class
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 한 문장만 실행합니다.
참조 : 4.4.1 Mapping basic properties/Generated and default property values