Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 业务函数上的事务性注释与其使用的DAO之间存在差异_Spring_Hibernate_Transactionmanager - Fatal编程技术网

Spring 业务函数上的事务性注释与其使用的DAO之间存在差异

Spring 业务函数上的事务性注释与其使用的DAO之间存在差异,spring,hibernate,transactionmanager,Spring,Hibernate,Transactionmanager,我遇到了以下设置: <tx:annotation-driven transaction-manager="transactionManager" /> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="hibernateSessio

我遇到了以下设置:

<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会话,同时使用注入读写数据源的DAOBean

<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);
}

@事务性(value=“readOnly”,传播=propagation.SUPPORTS,
只读=真)
公共列表findItems(列表项ID){
返回readWriteDao.findItems(ItemId);
}
我的问题是:

  • 此代码使用的是哪个实例
  • 我如何通过日志来验证这一点

  • 正如您在bean声明中所写的,它使用“hibernateSessionFactory”


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

    findItems的bean的作用域/生存期是什么,也就是说,该方法是在哪个上下文中执行的?如果这是你的意思,那么它是一个单例bean,并且被注入到Web服务的实现类中。你能解释一下你是如何得出这个结论的吗?请回答我的第二个问题?顺便说一下,这是个错误。我认为应用程序不应该这样做。