Iam using Spring's @Transactional
annotation for my DAO classes/methods for DB operations.
Hibernate
ORM configured with PostgreSQL
SessionFactory
is created with @Bean
in configuration and retreived using @Autowired
in DAO classes.
@Autowired
SessionFactory sessionFactory;
@Transactional(value = "myTransactionManager")
public int getTotalClientsInDatabase() {
Query countTotalClientsQuery = sessionFactory.getCurrentSession()
.getNamedQuery(DeviceInfo.COUNT_TOTAL_CLIENTS);
return Integer.parseInt(countTotalClientsQuery.uniqueResult().toString());
}
Whenever getTotalClientsInDatabase
is called, a Transaction is opened always.
I want to prevent opening of a Transaction as it is a SELECT
(DDL) query.
If @Transactional
is removed Exception
is thrown saying sessionFactory
is not synchronized.
If readOnly=true
is added performance is reduced.
@Transactional(value = "myTransactionManager", readOnly=true)
Is there any way to stop Session
from opening a Transaction
??