Tengo un problema con la cantidad de consultas realizadas por hibernate a la base de datos. Aquí es mi registro de consultas (usando MySQL 5.1) a la base de datos cuando se hace un selecto simple:Hibernate consultas en la base de datos
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
He leído mucho acerca de la configuración de confirmación automática a 0 y luego a 1. Yo sé que el valor predeterminado para una conexión es 1 y este comportamiento no se puede cambiar. Puede ejecutar SET autocommit = 0 pero el resultado es el mismo.
¿Hay alguna forma de evitar estas consultas? No sé por qué está sucediendo SELECT @@ session.tx_isolation y la reversión. Cuando uso una transacción obtengo una confirmación y luego una reversión. No estoy seguro de por qué una reversión siempre está cableada.
¡Muchas gracias!
Mi conf: primavera 2.5.6, Hibernate 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>
Administrador de transacciones de definición:
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
ACTUALIZACIÓN: Se las arregló para eliminar la reversión estableciendo una nueva propiedad
<property name="defaultReadOnly" value="true" />
Pero el problema ahora es que no puede hacer una modificación (no importa si configuro en la anotación transaccional readOnly = false) a la base de datos que da una SQLException. Esta propiedad establece la conexión readonly en true. Supongo que no hay forma de hacerlo con HibernateTemplate.
Uso la transacción aspectj para el tejido de código interno.
<aop:aspectj-autoproxy proxy-target-class="true" />
¡Sus transacciones fallan! ¿Habilitó el administrador de transacciones en el contexto de primavera? Y su registro es normal, el mío es similar, excepto de retrocesos. – madhead
Es solo una selección y no tiene anotación @transactional. Parece que todo está siendo tratado como una transacción. – Gonzalo
Me refiero al nivel de base de datos nativa: 27 Query rollback. Revierte la transacción. ¿Funcionan correctamente tus inserciones o actualizaciones? – madhead