본문 바로가기
카테고리 없음

Hibernate Session

by Younji! 2018. 12. 10.

@Transactional Test Case Lazy Load with Hibernate


Hibernate Session
-- beforeTranasaction
-- endTransaction
Hibernate Session.close()

https://developer.atlassian.com/server/confluence/hibernate-sessions-and-transaction-management-guidelines/


Hibernate Session 은 트랜잭션 scope 를 감싸는데, 즉 트랜잭션이 마무리 되면 세션도 종료된다. 

Lazy Load Object 같은 경우 Hibernate Session 단위로 유지되는 데 commit 이 완료되지 않은 시점에서 save / update 를 실행시킨다고 해서 Lazy Load Object 가 세션을 Initialize 해서 새로 가져오지 않는다. 


이러한 케이스는 잘 발생하지 않는데 통합 테스트 케이스를 한 메소드에 몰아놓고 Transactional을 걸어둘 경우에(Rollback을 위해서) 클래스에서 empty 로 초기화를 하지 않는 이상 NPE 를 발생시키면서 테스트케이스가 깨지게 된다. 



{"@timestamp":"2018-12-10T17:27:36.015","@version":"1","message":"Opening Hibernate Session. tenant=null, owner=null","logger_name":"org.hibernate.internal.SessionFactoryImpl$SessionBuilderImpl","thread_name":"main","level":"TRACE","level_value":5000,"LOG_FILE":"./logs/application.log"} ..........
{"@timestamp":"2018-12-10T17:27:36.119","@version":"1","message":"Closing session [6bad8c65-cf1f-4e32-b20a-91af083b60a1]","logger_name":"org.hibernate.internal.SessionImpl","thread_name":"main","level":"TRACE","level_value":5000,"LOG_FILE":"./logs/application.log"}


댓글