我正在使用 Hibernate 从 View 中选择数据(定义如下):
from test where trim(id)='1111'
但是 hibernate 生成以下更新子句:
update test set id=?, dd=? where id='1111'
有人有什么建议吗?看来是Hibernate的一个bug?
最佳答案
Hibernate 有时可以在后台为您生成更新!
例如,如果对象的状态与数据库不同步,就会发生这种情况。您可以根据需要覆盖此行为(请参阅下面的第二个项目符号)...但通常它可能会导致应用程序逻辑中出现一些错误。
就您的情况而言:发生这种情况有两个原因:
1) Hibernate 根据您作为输入发送的 HQL 内省(introspection)公共(public)方法(即 getter 和 setter)来设置映射文件中的字段。那么...这对您的问题有何影响?好吧... 如果您的 java bean 的 getter 中有一些复杂的逻辑,那么当您最终执行此调用时,该逻辑可能会导致 hibernate 生成一些更新,因为这些方法正在被调用。
2) 在一些已知的极端情况下,当您调用 select 语句时 Hibernate 会进行更新(即脏事务)。有时可以通过在 .hbm.xml 文件中适当的位置设置“update=false”来修复这些问题...
另请参阅:Using Enum in Hibernate causes select followed by an update statement
关于java - 是什么导致hibernate生成update子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8514916/