今天在项目开发的时候,碰到一个联合主键的表更新的问题,我是使用controller将实体类传到dao层的update方法里面的,由于上面刚用HibernateTemplate做了save操作,也是传的对象,上面的插入操作没有什么问题,控制台里面也打印出了Hibernate的insert语句,于是我直接复制上面的代码,然后改成了update操作,测试了一下,发现并没有报错,一开始我以为更新成功了,但是看到控制台没有打印出update的语句,然后去数据库查看果然数据没有更新,刷新也没有用,我马上想到了这个表是联合主键,直接用HibernateTemplate的update方法不能进行更新,我就想用HibernateTemplate直接来执行update的sql语句,于是上网搜了一下,发现了一个很好用的方法,方法如下:
public static void executeSQL(HibernateTemplate hibernateTemplate,String sql)
{
final String tempsql = sql;
hibernateTemplate.execute(new HibernateCallback()
{
public Object doInHibernate(Session session) throws HibernateException
{
session.createQuery(tempsql).executeUpdate();
return null;
}
});
}
该方法里面的sql语句必须为final类型的