Hibernate可以配置为动态产生update和insert语句。
<class name="ClassName" table="tableName" dynamic-update="true|false" dynamic-insert="true|false" />
当设为true的时候,Hibernate在运行期动态产生sql语句,对于insert来说,只插入那些不是null的属性,这样就可以支持数据库字段的default属性;对于update来说,只更新那些修改过的属性。
不过经过测试发现,在jsp页面当调用update更新po时,hibernate是更新po中的所有属性,包括属性为null,这样意味着你必须填充所有的po属性,包括你的确需要更新的和不需要更新的(不需要更新的属性也要设置为原来属性状态)。在实际应用中,一般是前台页面把更新的值传入,这意味着在业务操作中,虽然需要只更新一个字段时,也必须把所有字段值都传入页面,提交时再填充到po中,但是当po包括很多属性时,这很费事(要在页面中写很多hidden框来保存这些不需要更新的属性)。当然在更新前调用select,再把真正更新的属性设置到po也是一种办法。