在hibernate中使用update会将所有字段更新一遍,有些时候我们只需要更新某一些字段,一下提供四种方法.
1.XML中设置property 标签 update = "false" ,如下:我们设置 name 这个属性在更改中不做更改
<property name="name" update="false"></property>
或者
在Annotation中 在属性GET方法上加上@Column(updatable=false)
@Column(updatable=false)
public int getAge() {
return age;
}
缺点:我们的需求是不断变换的,我们不能保证每次只保证某个值不被修改,简言之,不灵活。
2.第2种方法··使用XML中的 dynamic-update="true" ,dynamic是动态的意思具体操作可以看这个点击打开链接,这个方法我比较提倡
3.第三种方式:使用HQL语句
public void updateState(CheckIn ch) {
Session session = this.getHibernateTemplate().getSessionFactory()
.openSession();
Transaction tx = session.beginTransaction();
String hql = "update CheckIn ch set ch.state = :state where ch.id= :id";
Query query = session.createQuery(hql);
query.setInteger("state", ch.getState());
query.setInteger("id", ch.getId());
query.executeUpdate();
tx.commit();
session.close();
}
可以根据具体的修改对象进行修改。
缺点:我认为有时候我们往往想让程序自动判断哪个为空哪个不为空(我们只需要修改我们所要修改的即可)
4.先获取对象,再通过set方式赋值
我们根据id先获取需要修改的对象,然后通过set修改所需要修改的值