我使用以下结构来执行数据库查询:
getHibernateTemplate().execute(new HibernateCallback<List<String>>() {
@Override
public List<String> doInHibernate(Session session) {
Query query = "select * from whatever";
query.setReadOnly(true);
return query.list();
}
}
在正在进行的休眠会话中可能会出现某些属性映射,但这些表不应以任何方式进行更改。我首先尝试将evict(对象)用于那些特定的实体,但readOnly似乎是更好的方式,我加载这些不可修改的对象而没有任何其他附加在单独的DAO中。我无法触及hibernate映射本身,因此任何更改都不适合我。
基本上我的问题是:
(1)在这种情况下,使用逐出或设置readOnly会有什么不同吗?
(2)是否有一种巧妙的方法为DAO中的每个呼叫设置readOnly(true)?我担心将来的新方法可能会忘记设置readOnly部分并弄乱我的数据库。