0

仕事に行け@Transactionalない。私は持っていapplicationContext.xmlます:

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

上記のトランザクション マネージャーはどこにも注入されません。

私はspring-servlet.xmlに持っています:

<!-- Allows transaction to be demarcated using @Transactional within classes.-->
<tx:annotation-driven
    mode="proxy"
    proxy-target-class="true" />

DIがほとんどないファサードBeanがあります

<!-- Bean for getting a handle onto the DAO's for accessing the database. -->
<bean id="evoDaoFacade" class="com.xxx.yyy.zzz.discovery.hibernate.EvoTAMDAOFacade">
...
    <property name="topoObjectDao" ref="topoObjectDao"></property>
    <property name="sessionFactory" ref="sessionFactory"></property>

私のコードでは、上記のファサードを非スプリングのインスタンス化されたクラスに取得します。spring-servlet.xml

<bean
    id="ApplicationContextProvider"
    class="com.xxx.yyy.zzz.config.ApplicationContextProvider">
</bean>

コードで:

EvoTAMDAOFacade evoDao = (EvoTAMDAOFacade) ApplicationContextProvider.getBean("evoDaoFacade");

しかし、次の方法でファサードからアクセスできるDAoを使用する場合:

TopoObject topoobj = evoDao.getTopoObjectDao().findById(topoId);

ここで、findById は次のとおりです。

@Transactional
public TopoObject findById( TopoObjectId id) {
        log.debug("getting TopoObject instance with id: " + id);
        try {
            TopoObject instance = (TopoObject) sessionFactory.getCurrentSession()
                    .get("com.xxx.yyy.zzz.discovery.hibernate.TopoObject", id);
            return instance;
        } catch (RuntimeException re) {
            log.error("get failed", re);
            throw re;
        }
    }

org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here という休止状態の例外が発生します

@transactional私の使い方の何が問題になっていますか?

4

0 に答える 0