我遇到了由hibernate對數據庫完成的查詢數量的問題。 這裏的(使用MySQL 5.1)做一個簡單的選擇時,我的查詢記錄到數據庫:休眠在數據庫上的查詢
111125 7:18:30
27 Query SET autocommit=0
27 Query SELECT @@session.tx_isolation
27 Query select this_.id as id34_0_, this_.media_id as media3_34_0_, this_.message as message34_0_, this_.user_id as user4_34_0_ from notifications this_
27 Query rollback
27 Query SET autocommit=1
我已經讀了很多關於設置自動爲0,然後到1。我知道,默認的連接是1,這種行爲不能改變。你可以運行SET autocommit = 0,但結果是一樣的。
無論如何避免任何這些查詢?我不知道爲什麼會發生SELECT @@ session.tx_isolation和回滾。當我使用事務時,我得到一個提交然後回滾。不知道爲什麼回滾總是被電纜連接。
非常感謝!
我的conf: 春2.5.6,3.6.0休眠,MySQL 5.1中
datasoure.xml:
<bean id="dataSource" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="initialSize" value="3" />
<property name="maxActive" value="20" />
<property name="minIdle" value="3" />
<property name="poolPreparedStatements" value="false" />
<property name="defaultAutoCommit" value="false" />
<property name="defaultTransactionIsolation" value="4" />
</bean>
事務管理的定義:
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
UPDATE:管理通過設置新的屬性來取消回滾
<property name="defaultReadOnly" value="true" />
但現在的問題是,您無法對發出SQLException的數據庫進行修改(無論是否設置了事務性註釋readOnly = false)。 該屬性將連接只讀設置爲true。 我猜是沒有辦法用HibernateTemplate做到這一點。
我使用aspectj事務進行內部代碼編織。
<aop:aspectj-autoproxy proxy-target-class="true" />
您的交易失敗!你是否在春天啓用了事務管理器?而你的日誌是正常的,我的是類似的,除了回滾。 – madhead
這只是一個選擇,它沒有@transactional註釋。似乎所有事情都被視爲交易。 – Gonzalo
我的意思是本機數據庫級別:27查詢回滾。它回滾交易。您的插入或更新是否正常工作? – madhead