hibernate在连接时不调用setReadOnly(true)

时间:2011-04-07 19:51:19

标签: hibernate spring transactions master-slave

我正在尝试设置spring / hibernate项目以使用主/从数据库设置。

事务似乎在春天工作(例如,当我在注释为@Transactional(readOnly = true)的方法中尝试hibernateTemplate.merge()时,我得到一个异常)。但是hibernate不会在注释的方法中使用slave数据库。

@Transactional(readOnly的=真)。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.ReplicationDriver"/>
    <property name="url" value="jdbc:mysql:replication://master:3306,slave:3306/proust"/>
    <property name="username" value="username"/>
    <property name="password" value="password"/>
</bean>

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

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

然后我用:

注释管理器类或DAO类
@Transactional(readOnly = true)

...以及

的一些方法
@Transactional(readOnly = false)

我希望类中的某些方法可以针对主服务器执行,而某些方法则针对服务器执行,但它们都会针对主服务器执行。我能做错什么?

1 个答案:

答案 0 :(得分:0)

Hibernate不会根据@Transactional注释将JDBC连接切换到R / O模式,它只会阻止刷新更改。