It is not completely right since HibernateTransactionManager only sets session flush mode to never but in the same transaction you can still modify your data using jdbc.
Solution on your problem mainly depends how you access your db and pn which level you wanna to protect it. On oracle you have additional isolation level :"read only" that really fits your needs.
But i would need to think how to enable this using Spring.
On the other side maybe Ibatis has some kind of hook you can use. In hibernate you have Interceptor (
http://www.hibernate.org/hib_docs/v3...terceptor.html). Its onPrepareStatement method process all sqls. The easiest would be to find similar hook in Ibatis.
In the end you can think of creating proxy around your datasource to retrieve connection that can prohibits DML within read only transactions.