java - 是什么导致hibernate生成update子句?

标签 java hibernate

我正在使用 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/

相关文章:

Hibernate:javax.persistence.* 驱动程序属性导致 UnsupportedOperationException:用户必须提供 JDBC 连接?

java打印接口(interface)的数组列表

java - 如何在play框架java中抛出自定义http错误

java - 将字符串与对象变量的数组列表进行比较

java - 注解@Column包javax.persistence在使用spring data时出错

mysql - 当尝试使用现有字段插入新实体时,Spring 抛出 PersistentObjectException

Java: jetty 错误 - 503

java - IntelliJ如何将模块添加到现有模块

java - 嵌套异常是 org.hibernate.exception.GenericJDBCException : could not execute statement

java - Hibernate 不更新 MySQL 数据库中的记录