Mam problem z ilością zapytań wykonanych przez hibernację do bazy danych. Oto mój dziennik zapytań (przy użyciu MySQL 5.1) do bazy danych, gdy robi to prosta wybierz:Kwerendy hibernacji w bazie danych
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
Czytałem dużo na temat ustawiania trybu automatycznego na 0, a następnie do 1. Wiem, że domyślna dla połączenia jest 1 i tego zachowania nie można zmienić. Możesz uruchomić Autocommit SET = 0, ale wynik jest taki sam.
Czy mimo to można uniknąć tych pytań? Nie wiem, dlaczego odbywa się SELECT @@ session.tx_isolation i rollback. Kiedy używam transakcji, otrzymuję zatwierdzenie, a następnie wycofanie. Nie wiem, dlaczego wycofanie jest zawsze kable.
Wielkie dzięki!
Moja conf: Wiosna 2.5.6, 3.6.0 hibernacji, 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>
transakcja definicja kierownik:
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
UPDATE: Zarządzane, aby wycofać wycofanie, ustawiając nową właściwość
<property name="defaultReadOnly" value="true" />
Ale problem polega na tym, że nie można dokonać modyfikacji (bez względu na to, czy ustawiłem adnotację transakcyjną readOnly = false) do bazy danych dającej wyjątek SQLException. Ta właściwość ustawia połączenie tylko do odczytu na true. Zgaduję, że nie ma sposobu, aby to zrobić z HibernateTemplate.
Używam transakcji aspectj do wewnętrznego tkania kodu.
<aop:aspectj-autoproxy proxy-target-class="true" />
Twoje transakcje zawiedzie! Czy aktywowałeś menedżera transakcji w kontekście wiosny? Twój dziennik jest normalny, mój jest podobny, z wyjątkiem wycofań. – madhead
To tylko wybór i nie ma adnotacji @transactional. Wygląda na to, że wszystko traktuje się jak transakcję. – Gonzalo
Mam na myśli rodzimy poziom bazy danych: 27 przywrócenie zapytania. Wycofuje transakcję. Czy Twoje wstawki lub aktualizacje działają poprawnie? – madhead