在Hibernate 中,有時我們只需要更新部分字段,此時如果使用update()方法,會將所有字段都更新,對於沒有set的字段,就會設置成NULL,如果這些字段里面有非空的字段就會報錯。
解決的方法可以直接寫HQL語句,但是如果字段較多,並且更新的字段是不確定的時候,直接寫HQL語句就顯得比較麻煩。
另一種方法是在XML文件中設置dynamic-update="true",這樣設置以后,只對set了的字段更新,沒有set的字段就不會更新。
<class name="com.hzhi.entity.Person" table="person" dynamic-update="true">
還有一種有效的方法就是先根據需要更新的記錄主鍵,找出這條記錄,根據提交的參數set相應的字段,然后再update()。
// 根據用戶提交的ID找出person2 int id = person.getId(); Person person2 = xkmpService.findById(id); // 設置需要更新的字段的值到person2 person2.setAge(person.getAge()); // 更新person2 xkmpService.updatePerson(person2);
