Hibernate findByCriteria奇怪的行为

时间:2009-06-18 18:52:34

标签: java oracle hibernate

我有一个简单的方法只做两行并尝试返回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并进行多次更新?是否必须为挂钩到休眠的所有表提供更新访问权限?我不希望表格更新!

或者代码有问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

是的,应该返回所有对象。

我发现了最不明显的问题:

在getName方法中,我做了一些子字符串函数并返回了一个修改后的字符串。

我猜hibernate立即尝试使用getName中返回的内容更新数据库。 (什么?!为什么?!)

这是在Hibernate文档中的任何地方提到的还是应该是常识?我是个菜鸟。

无论如何,谢谢你的帮助。