2013-03-26 38 views
0

我見過幾個類似的問題,但沒有一個建議的解決方案對我有幫助。hibernate4,spring 3:找不到當前線程的會話

詳細信息,這是一個簡單的爲例:

文件:MandatTypeBean.xml

<bean id="mandatTypeDAO" class="gestint.data.dao.impl.MandatTypeDAOImpl"> 
    <property name="sessionFactory" ref="sessionFactory"/> 
</bean> 

<bean id="ActionMandatType" class="gestint.data.action.MandatTypeAction"> 
    <property name="mandatTypeDAO" ref="mandatTypeDAO" /> 
</bean> 

文件:HibernateSessionFactory.xml

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 

    <property name="dataSource"> 
     <ref bean="DataSource"/> 
    </property> 

    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
     </props> 
    </property> 


    <property name="mappingResources"> 
     <list> 
      <value>gestint/data/model/MandatType.hbm.xml</value> 
     </list> 
    </property> 
</bean> 

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory"></property> 
</bean> 

文件:MandatTypeDAO.java

public class MandatTypeDAOImpl implements MandatTypeDAO { 
private SessionFactory sessionFactory; 

public SessionFactory getSessionFactory() { 
    return sessionFactory; 
} 
public void setSessionFactory(SessionFactory sessionFactory) { 
    this.sessionFactory = sessionFactory; 
} 

public List<MandatType> listMandatType() {  
    sessionFactory.getCurrentSession().isConnected();  

    return null; 
} 

}

文件:MandatTypeAction.java

public class MandatTypeAction extends ActionSupport{ 
    private static final long serialVersionUID = 1L; 

    private MandatTypeDAO mandatTypeDAO;  
    private List<MandatType> mandatList = new ArrayList<MandatType>(); 

    public void setMandatTypeDAO(MandatTypeDAO mandatTypeDAO) { 
     this.mandatTypeDAO = mandatTypeDAO; 
    } 

    public List<MandatType> getMandatTypeList() { 
     return mandatList; 
    } 

    public String listMandatType() {    
     mandatList = mandatTypeDAO.listMandatType(); 
     return SUCCESS; 
    } 

}

而且我的錯誤..

當我嘗試存取權限 public List<MandatType> listMandatType() 與一個林格簡單的測試:

sessionFactory.getCurrentSession().isConnected(); 

我得到這個錯誤:

17:02:28062 ERROR接線員:38 - 中 處理請求時出現異常:無會話發現當前線程 org.hibernate作爲.HibernateException:無會話發現當前線程 在 org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97) 在 org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryI mpl.java:980) 在 gestint.data.dao.impl.MandatTypeDAOImpl.listMandatType(MandatTypeDAOImpl.java:21) 在 gestint.data.action.MandatTypeAction.listMandatType(MandatTypeAction.java:26) 在陽光下。 reflect.NativeMethodAccessorImpl.invoke0(本機方法)在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java.lang.reflect中。 Method.invoke(Method.java:597)at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:446) at com.opensymphony.xwork2.DefaultActionInvoca tion.invokeActionOnly(DefaultActionInvocation.java:285) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 在 org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java: 256) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor。的java:176) 在 com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 com.opensymphony .xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265) 在 org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) 在 com.opensymphony.xwork2.interceptor.MethodFilterInterceptor .intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(Defau ltActionInvocation.java:242) 在 com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 COM .opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:238) 在 com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:242) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept( ParametersInterceptor.java:238) 在 com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 COM .opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 org.apache.struts2.interceptor.MultiselectInterceptor.intercept (MultiselectInterceptor.java:73) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInv ocation.java:242) 在 org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 有機.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept (ModelDrivenInterceptor.java:100) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 com.opensymphony.xwork2.interceptor .ChainingInterceptor.intercept(ChainingInterceptor.java:145) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171 ) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor。的java:98) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176) 在 com.opensymphony .xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java :242) at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:242) 在 org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) 在 org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:544) 在 org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) at org.apache.struts2.dispatc her.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) 在 weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74) 在 weblogic.servlet.internal.WebAppServletContext $ ServletInvocationAction.wrapRun( WebAppServletContext.java:3288) 在 weblogic.servlet.internal.WebAppServletContext $ ServletInvocationAction.run(WebAppServletContext.java:3254) 在 weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 在 weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) at weblogic.servlet.provider.WlsSubjectHandle.r UN(WlsSubjectHandle.java:57) 在 weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2163) 在 weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2089) 在 的WebLogic .servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2074) 在 weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1512) 在 weblogic.servlet.provider.ContainerSupportProviderImpl $ WlsRequestExecutor.run(ContainerSupportProviderImpl .java:254) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)at weblogic.work.ExecuteThread .run(ExecuteThread.java:221)

有人可以幫我嗎?

回答

0

在您的應用程序上下文xml中添加以下行。

<tx:annotation-driven /> 

然後用@Transactional註釋裝飾你MandateTypeAction類,並且將默認被傳播(默認爲傳播類型REQUIRED)到調用的方法。

然後事務將被注入MandateTypeAction。

HTH。

0

爲什麼要注入SessionFactory?只需直接使用Session:

@Repository 
public Mydao { 

    @PersistenceContext 
    private Session session; 

    @Transactional 
    public void persist(entity e) { 
     session.persist(e); 
    } 
} 

0

感謝對您的支持!它的工作原理,

的解決方案是:

我添加註釋驅動 文件:HibernateSessionFactory.xml

<tx:annotation-driven transaction-manager="transactionManager"/> 

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory"></property> 
</bean> 

我的annotions添加到DAO 文件:MandatTypeDAO.java

@Transactional(readOnly = true) 
public interface MandatTypeDAO { 
    @Transactional(readOnly = true) 
    List<MandatType> listMandatType(); 
} 
相關問題