@Value和Could not obtain transaction-synchronized Session for current thread
1.说明
@Value(“#{}”) 表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法。当然还有可以表示常量。
2.出现的问题
Caused by: org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current threadat org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:134)at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014)at tdh.dao.impl.UserHibernateDaoImpl.selectMc(UserHibernateDaoImpl.java:104)at tdh.dao.impl.UserHibernateDaoImpl$$FastClassBySpringCGLIB$$e2f2f267.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:669)at tdh.dao.impl.UserHibernateDaoImpl$$EnhancerBySpringCGLIB$$bcfb1afd.selectMc(<generated>)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.springframework.expression.spel.support.ReflectiveMethodExecutor.execute(ReflectiveMethodExecutor.java:117)at org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:129)at org.springframework.expression.spel.ast.MethodReference.access$000(MethodReference.java:49)at org.springframework.expression.spel.ast.MethodReference$MethodValueRef.getValue(MethodReference.java:347)at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:88)at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:121)at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:262)at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:161)... 66 more
3.解决方法
@Value(“#{}”) 表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法。当然还有可以表示常量。静态提前加载,那时候dao还没加载事务管理,事务在service上,在dao方法上面加一个事务的注解就行了,或者调用service里面加了注解的方法。
@Transactional(transactionManager = "userHTransactionManager")