当前位置:首页>开发>正文

spring提供的hibernate模板类HibernateTemplate,中save等方法是怎么提交事务的 getHibernateTemplate和getSession的区别

2023-07-03 12:14:00 互联网 未知 开发

 spring提供的hibernate模板类HibernateTemplate,中save等方法是怎么提交事务的 getHibernateTemplate和getSession的区别

spring提供的hibernate模板类HibernateTemplate,中save等方法是怎么提交事务的?


使用HibernateTemplate执行execute(new HibernateCallback())方法,从HibernateCallback中得到session,
在此session中做多个操作,并希望这些操作位于同一个事务中。
如果这样写:
public static void main(String ss[]) {
CtxUtil.getBaseManager().getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
// 保存stuStudent stu1 = new Student()
stu1.setName("aaaa")// 在数据库中,name字段不允许为null
session.save(stu1)
session.flush()//实际上,如果不是程序员"手痒"来调用这个flush(),HibernateTemplate中session的事务处理
还是很方便的
Student stu2 = new Student()
session.save(stu2)// 没有设置name字段,预期会报出例外
session.flush()
return null
}
})
}

getHibernateTemplate和getSession的区别

你说的应该是spring中的hibernatetemplate.save。使用HibernateTemplate 管理hibernate的操作的时候,我们的DAO 继承了HibernateDaoSupport之后,使用this.getHibernateTemplate().save() 并不会向数据库中插入数据。实际上这时候只是在hibernate的session缓存中持久化了对象user,为了即时更新数据库,还要去配置文件applicationContext和使用事务管理的DAO。
Session.save()方法用于实体对象的持久化保存,也就是说当执行session.save()方法时会生成对应的insert SQL语句,完成数据的保存。每一次保存对象都需要得到一个session,然后保存完之后关闭session,此时会更新数据库。而执行到session.save()方法的时候只是持久化了对象 ,并没有向数据库中插入记录。

spring集成hibernateTemplate 怎么正确获取session

回答1: LZ这个问题我也出现过,我配置连接池的时候,死活不知道怎么的,数量一下子就没有了。后来才发生在hibernate中去拿都有问题,这个问题,请牛人给解释一下。后来我使用
this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
return session.createQuery(hql).list()
}
})
这个方式使用了Session,这个就不需要我们去处理,这样叫给容器管理去了

最新文章