 鲜花( 2)  鸡蛋( 0)
|
current_session_context_class 主要是用来配置当前 data transaction session bind to what
8 p0 ?, K. g0 |基本参数:
6 ^$ z, x" H& l- Ijta | thread | managed | custom.Class& J. w+ ?# X* t" \
主要是配合! Z9 T+ f' O* t6 f; c0 V
SessionFactory.getCurrentSession()
+ h+ ~4 [" w8 Z: H来用的.
* A$ H! d& n. o1 B0 X" L: vThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,' W8 F& L- ?' }5 B5 e' [9 {# e1 n
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
: U# s) N q* d1 R5 Acontext.BeginRequest += OpenSession;
* `6 P0 J# q& B! u5 \# @. B8 u.Bind(HttpContext.Current, SessionFactory.OpenSession())
( g; F; d" `6 i' f* s5 k2 I: n
9 h9 p9 r4 O' `; O. H//do transaction4 f7 X7 h$ K) s9 c& ^ n
getCurrentSession().Submit();$ g; \/ k4 l$ m R% [ c
getCurrentSession().RollBack();
% }" `5 x- Z1 L3 P) Y! b& E/ q...
! ]' F$ k# d& E+ v! |Unbind(HttpContext.Current, SessionFactory)% e" i" F. ]! U) j
' f7 q7 Q0 w" X. o& R" V
context.EndRequest += CloseSession;
# t4 o8 v$ `, U! E' z( D* v
& g w. Q& ^( R1 P7 Z7 P 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。 |
|