业务功能上的事务性注释与其使用的DAO之间的差异



我遇到了以下设置:

<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="hibernateSessionFactory" />
</bean>
<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    <!-- connection string to read-write instance -->
</bean>

<bean id="roTransactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="roHibernateSessionFactory" />
    <qualifier value="readOnly" />
</bean>
<bean id="roHibernateSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="roDataSource" />
</bean>
<bean id="roDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    <!-- connection string to read-only instance -->
</bean>
带有"ro"前缀的bean基本上是为了允许我们连接到数据库的只读实例。

然后我遇到了这段代码,其中我们使用事务管理器,它应该给我们提供连接到只读实例的hibernate会话,同时使用注入了读写数据源的DAO bean。

<bean id="readWriteDao" class="com.services.dao.ReadWriteDao" scope="singleton">
    <property name="sessionFactory" ref="hibernateSessionFactory" />
</bean>
@Transactional(value = "readOnly", propagation = Propagation.SUPPORTS,
        readOnly = true)
public List<MyItem> findItems(List<Long> itemIds) {
    return  readWriteDao.findItems(itemIds);
}

我的问题是:

  1. 此代码使用的是哪个实例?
  2. 我如何通过日志验证?

正如您在bean声明中所写的那样,它使用"hibernateSessionFactory"。

(我不知道应用程序如何反应,如果你通过一个只读的sessionfactory加载一个实体,并通过另一个sessionfactory保存它,因为这些对象永远不会在写会话。有趣的方法;))

相关内容

  • 没有找到相关文章

最新更新