在利用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