2007년 2월 13일 화요일

Hibernate 의 좋은 팁들...

1. hbm.xml 의 Primary Key 생성 전략
Oracle일 경우 hibernate자체에서 지원하고 있는 sequence를 통한 키 생성방식으로 설정한다.
<generator class="sequence">
      <param name="sequence">COMPLAINHANDLENODE_SEQ</param>
</generator>

속성을 auto-import=true로 설정하면 풀 네임을 쓸 필요가 없다.

2. 관계
many-to-one
one-to-one
many-to-many

3. 집합
lazy initialization
집합은 지연되여 초기화 되여질수 있다, 그 말인즉 어플리케이션의 접근이 필요 할때라야만이 그들의 값을 로딩하는 것이다.
s = sessions.openSession();
User u = (User) s.find("from User u where u.name=?", userName,
Hibernate.STRING).get(0);
Map permissions = u.getPermissions();
s.connection().commit();
s.close();
Integer accessLevel = (Integer) permissions.get("accounts"); //Error!

위 소스코드를 보면 마지막 라인에서 에러가 뜨는데 그 원인인즉 commit이 되여지기전에 permission 사용되지 않으므로 인하여 초기화가 이루어 지지 않았으며 또한 이떄 임 session이 종료가 되여진 상태므로 permission이 다시 데이타를 읽어오기가 불가능 해짐으로 문제가 생긴것이다.

4. 필터링
집합적 필터링은 일종의 특수한 검색방식으로서 퍼시스턴트된 집합이나 array에 한하여 사용이 되여진다.
Collection blackKittens = session.filter(
pk.getKittens(), "where this.color = ?", Color.BLACK,
Hibernate.enum(Color.class)
);

여기서 눈여겨 볼것은 filter메소드는 사실상 쿼리문중 from절을 필수로 하지 않는다는것이다.

5. 데이타 저장 및 업데이트
Save() 메소드는 임시 상태를 퍼시스턴스 상태로 바꾸어주는 작용을 한다. 객체가 퍼시스턴스화 되면 Session 캐쉬속에 놓여져 있게 되고 그에 대한 임의의 조작은 모두 동기화적으로 데이타베이스에 반영이 되여진다.
Student stu = new Student();
stu.setCardId("1234");
stu.setId("1111");
.......................................
session.save(stu);
stu.setCardId("2345");
session.save(stu);
session.update(stu);
.......................................

실제 마지막에 추가한 session.save와 session.update는 아무런 의미도 없게 된다.

이 포스트는 계속 업뎃이 되여진다...

댓글 없음:

댓글 쓰기