Hibernate-学习笔记04-数据更新方法
试验目的:
更新数据库中某一字段,其余字段不变。
(1)使用Update()方法
查阅Hibernate API(Hibernate_3.2.0_Reference_zh_CN.chm)得到Update()方法有:
update(Object object)
update(Objectobject,Serializableid)
update(StringentityName,Objectobject)
update(String entityName, Object object, Serializable id)很不幸运的事我的MyEclipse中只有一下方法(我用的是hibernate3.3.2,比API版本要高...我表示无语)
update(Object object)
update(String entityName, Object object)
测试代码:
Teacher teacher = new Teacher(); teacher.setId(4); teacher.setName("Marry"); teacher.setBirthDate(new Date()); SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory(); Session session = sf.getCurrentSession(); session.beginTransaction(); session.update(teacher); session.getTransaction().commit();
_Teacher
set
birthDate=?,
name=?,
title=?
where
id=?数据库中结果:
4 | 2011-04-13 19:52:52 | Marry | NULL
结论:使用Update()方法来更新数据得到的是数据对象的整体更新,不存在保留未修改选项,此方法不符合要求。
(2)使用Persistence 来更新
代码:
SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory(); Session session = sf.getCurrentSession(); session.beginTransaction(); teacher = (Teacher)session.get(Teacher.class, 5); teacher.setName("Marry"); session.getTransaction().commit();
生成SQL语句
update
_Teacher
set
birthDate=?,
name=?,
title=?
where
id=?数据库显示结果:
5 | 2011-04-13 08:22:21 | Marrys | XX
结论:数据库中只修改了某一字段值,其余没有改变,符合要求。
(3) 延伸一下问题,若是使用persistence 来更新数据中的对象信息时Hibernate会发送全部字段的更新信息,有时候会降低效率,若是只发送需要修改的某一字段的信息?
HQL语句 : Hibernate Quary Language 是Hibernate使用的面向对象的数据查询语言。
代码:
Teacher teacher = new Teacher(); SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory(); Session session = sf.getCurrentSession(); session.beginTransaction(); Query query = session.createQuery("update Teacher t set t.name='Toms' where t.id=5"); query.executeUpdate(); session.getTransaction().commit();
Hibernate产生SQL语句:
update
_Teacher
set
name='Toms'
where
id=5数据显示结果:
5 | 2011-04-13 08:22:21 | Toms | XX
结论:该方法同样可以满足实验要求,同时又能做到执行时候只发送需要修改字段的SQL语句,同时有使用到了HQL面向对象的语句,这种方法在项目中比较常用,是解决Update的首选方法。