There seem to be very different opinions about using transactions for reading from a database.
Quote from the DeveloperWorks article Transaction strategies: Models and strategies overview:
Why would you need a transaction if you are only reading data? The answer is that you don't. Starting a transaction to perform a read-only operation adds to the overhead of the processing thread and can cause shared read locks on the database (depending on what type of database you are using and what the isolation level is set to).
As a contrary opinion there is the following quote from Hibernate documentation Non-transactional data access and the auto-commit mode
Our recommendation is to not use the autocommit mode in an application, and to apply read-only transactions only when there is an obvious performance benefit or when future code changes are highly unlikely. Always prefer regular ACID transactions to group your data-access operations, regardless of whether you read or write data.
There is also a similar debate on the EclipseLink mailing list here.
So where lies the truth? Are transactions for reading best-practice or not? If both are viable solutions, what are the criteria for using transactions?
As far as I can see it only make a difference if the isolation level is higher than 'read committed'. Is this correct?
What are the experiences and recommendations?