当设置了持久性实例但未更改时,hibernate是否会更新数据库?

当设置了持久性实例但未更改时,hibernate是否会更新数据库?,hibernate,Hibernate,如果我有一个持久性对象的实例,并且我像这样设置了一些成员: MyThing thing = session.get(MyThing.class, id); thing.setSomething(thing.getSomething()); session.update(thing); 这实际上会导致hibernate发出SQL更新命令来刷新记录吗?或者hibernate足够聪明,可以知道对象已更新,但值实际上没有更改吗?我相信它足够聪明,可以识别对象未更改,从而避免更新 确定的方法是为Hibe

如果我有一个持久性对象的实例,并且我像这样设置了一些成员:

MyThing thing = session.get(MyThing.class, id);
thing.setSomething(thing.getSomething());
session.update(thing);

这实际上会导致hibernate发出SQL更新命令来刷新记录吗?或者hibernate足够聪明,可以知道对象已更新,但值实际上没有更改吗?

我相信它足够聪明,可以识别对象未更改,从而避免更新

确定的方法是为Hibernate打开SQL输出。加

<property name="hibernate.show_sql">true</property>
true

到hibernate配置的会话工厂部分,在hibernate.cfg.xml中。

AFAIK,它不会执行SQL命令。

通常,如果属性值比较相等,它不应该发出更新。(具体来说,根据类型实现比较equal——这通常与equals(Object)方法相同)

nemo是对的,您应该始终知道SQL Hibernate正在执行什么。尽管我建议将'org.hibernate.SQL'记录器('net.sf.hibernate.SQL'用于hibernate 2)设置为调试级别(在log4j中),而不是使用“show_SQL”属性(它总是写入System.out或System.err iirc)


(虽然我认为你的意思是
session.flush()
,而不是
session.update(东西)
…除非你使用的是无状态会话?

你是在这里使用纯Hibernate还是在JPA中使用Hibernate?