【问题标题】:Hibernate findByCriteria strange behaviourHibernate findByCriteria 奇怪的行为
【发布时间】: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) 会返回整个数据库中的所有映射对象。这是你的意图吗?
  • 我认为日志条目与代码不匹配。你确定没有其他事情发生吗?

标签: java oracle hibernate


【解决方案1】:

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

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

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

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

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

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2019-04-06
    相关资源
    最近更新 更多