레이블이 hibernate인 게시물을 표시합니다. 모든 게시물 표시
레이블이 hibernate인 게시물을 표시합니다. 모든 게시물 표시

2010-12-03

Hibernate not recognizing transaction config - Spring Community Forums

Hibernate not recognizing transaction config - Spring Community Forums

Spring에서 Hibernate를 사용할 때에 HibernateTemplate이 더 이상 권장되지 않는다고 해서 순수 Hibernate API만 쓰는 방식으로 변경하려 한다. Repository 에서는 Hibernate의 SessionFactory만 주입받아서 사용하는 것이다.

이 때, createQuery(), get() 등의 메소드를 사용하려 하면 active transaction이 없다는 에러를 당할 수 있는데 이것은 위 url에서 jtigger가 제시하는 것처럼, hibernate.current_session_context_class 속성값을 'thread'로 두는 것을 제거해야 한다. 왜냐하면 spring이 SessionFactory를 설정할 때에, session이 transaction과 같은 ThreadLocal에 저장되도록 세팅하는데, 강제로 속성을 위와 같이 지정하면 두개의 서로 다른 ThreadLocal이 만들어지게 되는 셈이기 때문이다.

2010-02-09

팀에 하이버네이트 도입을 생각함

http://groups.google.com/group/KGGUG/browse_thread/thread/6447f7838e9b0689 에서
"[KGGUG] 그루비 에서 스칼라 로" 글을 읽다가 ORM(하이버네이트)에 대한 의견 충돌 발생.

흠... 사실 서로 다른 방식의 문제해결 접근인데 서로 맞추기는 힘들겠지.
그렇다고 해도 각자 갈 길을 가시오라고 말할 수 없는 것은 현실에서 항상 부딪치는 문제이기 때문이다.

내 개인적으로는 ORM쪽에 한 표.

나는 개발자들이 잔뜩 적은 sql문장을 견딜 수 없다. 한 개의 sql문이 모니터 화면 하나를 가득 채운다.
이게 관리가 안되는거다. 누가 도대체 그런 sql문을 이해하고 싶어 하겠는가 말이다.

아름답지 않은 코드에 끝까지 저항하자.

2009-09-16

LazyInitializationException 처리

나도 당해보니 고민이 되는구먼... 내가 이해하는게 맞는지 잘 모르겠단 말야... 이건 이런 경우가 아닐까 해.
XXX x = aaaService.getXXX();
bbbService.doSomething(x);

bbbService.doSomething(XXX x) {
    x.getYYY();  <-- 여기서 LazyInitializationException
}
즉 XXX x 객체가 세션의 바운더리를 넘어서 이동할 경우 Detached 상태가 된다는 것이 문제의 원인일 것 같아.

그러므로 해결책은 1) detached된 객체를 re-attach하거나 2) 위 두 서비스의 호출을 하나의 Unit of Work로 묶어주거나.

2번이 애플리케이션 설계 측면에서 더 매력적일 듯.

인터넷에 있는 해결책들은 대부분 lazy=false 를 사용하라 되어 있던데 이것도 좀 그래. 왜냐하면 난 대부분의 경우 lazy=true 기능을 쓰고 싶단 말이지. 그리고 lazy=false로 하지 않아도 쿼리시에 eager fetch를 하면 되니까.

이상은 모두 추측. ㅎ (문서를 상세히 읽지 않았음)