簡體   English   中英

使用Spring配置手動打開休眠會話

[英]Manually open a hibernate session with Spring config

我遇到的問題是我使用Spring來管理和加載Web應用程序的休眠狀態。 我目前正在使用OpenSessionInViewFilter。 當我查看應用程序時,這可以按預期工作,但是當我嘗試從與視圖無關的活動(例如Quartz任務或為幫助完成某些任務而創建的某些Runnable線程)訪問休眠時,效果卻不佳。 這將導致延遲初始化異常,並且不會發生會話可用的異常。

這是我目前使用Spring管理Hibernate的方式

<bean id="mainDataSource" 
    class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

    [..DB config..]
</bean>

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

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

<bean id="txManager" 
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">

    <property name="sessionFactory"><ref local="sessionFactory"/></property>
    <property name="dataSource"><ref local="mainDataSource"/></property>
</bean>

然后,我配置DAO對象,這些對象擴展了HibernateDaoSupport並將它們注入服務類中

<bean id="myDAO"
    class="package.myDAO">
    <property name="sessionFactory">
        <ref bean="sessionFactory" />
    </property>
</bean>

<bean id="mySvcTarget" class="package.myService">
    <property name="myDAO"><ref bean="myDAO"/></property>
</bean> 

<bean id="myService" 
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
        <ref bean="txManager"/>
    </property>

    <property name="target">
        <ref bean="mySvcTarget"/>
    </property>

    <property name="transactionAttributes">
        <props>
            <prop key="*">PROPAGATION_REQUIRED</prop>
        </props>
    </property>
</bean>

因此,在我的應用程序中,將myService注入到我的控制器類中,以便使用它來訪問我的DAO。 就我的情況而言,盡管我似乎需要以其他方式訪問我的DAO(或服務),然后手動打開和關閉休眠會話,因為我的服務類似乎僅在視圖會話期間處於打開狀態。 我不確定這樣做的最佳方法。 所有的休眠配置已經在Spring中存在,所以我假設這只是一個問題或以某種方式調用它們。

首先,Spring正在顯示您正在使用的所有其他服務(非視圖)。 最簡單的方法是使用@Service批注。 為了使其正常工作,您可以在配置中添加<context:component-scan base-package="your.package">

之后,如果Spring將您的服務視為Bean,則足以使用@Transactional批注在其中包含Hibernate會話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM