在利用hibernate开发中,经常会遇到这么一种情况,当调用update更新po时,hibernate是更新po中的所有属性,包括属性为null,这样意味着你必须填充所有的po属性,包括你已经的确更新的和没有更新的(没有更新的属性也要设置为原来属性状态)。在实际应用中,一般是前台页面把更新的值传入,这意味着在业务操作中,虽然需要只更新一个字段时,也必须把所有字段值都传入页面,提交时再填充到po中,但是当po包括很多属性时,这很费事(要在页面中写很多hidden框来保存这些不需要更新的属性)。当然在更新前调用select,再把真正更新的属性设置到po也是一种办法。下面看一下几种相对比较好的解决办法:
1.XML中设置property 标签 update = "false" ,如下:我们设置 age 这个属性在更改中不做更改
<propertyname="username" update="false"></property>
在Annotation中在属性GET方法上加上@Column(updatable=false)
2.使用XML中的 dynamic-update="true"
<class name="com.sccin.entity.Student" table="student" dynamic-update="true">
3.使用HQL语句(灵活,方便)
使用HQL语句修改数据
public void update(){
Session session= HibernateUitl.getSessionFactory().getCurrentSession();
session.beginTransaction();
Query query =session.createQuery("update Usert set t.password= '123456' where username= ‘’nihao");
query.executeUpdate();
session.getTransaction().commit();
}
我参加了大学生IT博客大赛,恳请大家前来支持。。。
投票传送:https://blog.51cto.com/contest/college2013/3545281
转载于:https://blog.51cto.com/javacsh/1201549