Hibernate не вызывает setReadOnly (true) при подключении - PullRequest
2 голосов
/ 07 апреля 2011

Я пытаюсь настроить свой проект spring / hibernate для работы с базой данных master / slave.

Транзакции, кажется, работают весной (например, когда я пытаюсь hibernateTemplate.merge () в методе, аннотированном как @Transactional (readOnly = true), я получаю исключение). Но hibernate не использует ведомую базу данных в аннотированных методах.

@ транзакционный (доступен только для чтения = истина).

<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 голосов
/ 01 сентября 2011

Hibernate не переключает соединение JDBC в режим R / O в отношении аннотации @Transactional, он только предотвращает сброс изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...