【发布时间】:2010-11-04 02:41:00
【问题描述】:
我有一个简单的方法,它只执行两行并尝试返回 oracle 数据库表中的所有对象:
DetachedCriteria criteria = DetachedCriteria.forClass(Object.class);
return (Collection)getHibernateTemplate().findByCriteria(criteria);
但是,我收到“ORA-01031:权限不足”错误。当我检查 show_sql 的日志时,我发现:
Hibernate: select this_.NAME as NAME8_0_, from PL_VW this_ where ID=?
Hibernate: update PL_VW set NAME=? where ID=?
Hibernate: update PL_VW set NAME=? where ID=?
Hibernate: update PL_VW set NAME=? where ID=?
Hibernate: update PL_VW set NAME=? where ID=?
Hibernate: update PL_VW set NAME=? where ID=?
...
为什么 findByCriteria 会选择一个 ID 并进行多次更新?必须为所有与休眠挂钩的表提供更新访问权限吗?我不希望更新表格!
还是代码有问题?
提前致谢。
【问题讨论】:
-
我不知道您为什么会在那里看到 UPDATE 语句,但我相信 DetachedCriteria.forClass(Object.class) 会返回整个数据库中的所有映射对象。这是你的意图吗?
-
我认为日志条目与代码不匹配。你确定没有其他事情发生吗?