Hibernate+Spring:getHibernateTemplate与当前线程及事务提交问题
Hibernate+Spring:getHibernateTemplate().getSessionFactory().getCurrentSession().begin...
Hibernate+Spring:
getHibernateTemplate().getSessionFactory().getCurrentSession().beginTransaction().commit()难题!
-----------------------------------
有HibernateDAO extends HibernateDaoSupport implements myDAOInterface**
其内的方法:
public void save(Object object) {
getHibernateTemplate().save(object);
}
进行添加操作的时候,能够从控制台看到SHOWSQL信息,但是数据库当中没有数据插入(我猜测是其事务没有进行提交)
于是利用以下各式进行提交:
1.getHibernateTemplate().getSessionFactory().openSession().beginTransaction().commit()
2.getHibernateTemplate().getSessionFactory().openSession().getTransaction().commit()
3.getHibernateTemplate().getSessionFactory().getCurrentSession().getTransaction().commit()
4.getHibernateTemplate().getSessionFactory().getCurrentSession().beginTransaction().commit()
其中只有4能够正常执行,并且插入数据。其它三个都发出不同异常,有的是没有事务等,有的是没有绑定SESSION的。
补充:
a.在hibernate.cfg.xml当中,已经设置了
<property name="current_session_class_name">thread</property>
(大概是以上式子,我现在在网吧,没有用自己电脑,不知道记错没?)
其中在1,2形式的错误当中,出现no session 绑 to thread
b.在applicationContext.xml当中,配置了事务管理(即仅仅配置了<bean id="transactionManager" ...>.....</bean>
疑问:
getHibernateTemplate()如果才能得到当前被ThreadLocal绑定的Session,即,除了通过getHibernateTemplate().getSessionFactory().getCurrentSession().beginTransaction().commit()来让事务提交,还有没有其它办法,让它完成提交任务???
-----------------------------
以上的疑问来自于代码的修改过程中发出的,先前的SAVE方法是:
利用<property name="current_session_class_name">thread</property>
设置之后
public class HibernateDAO {
public void save(Object o) {
HibernateUitl.打开currrentSESSION
SESSION开启事务。。。
主要操作....
事务提交。。。。
currentSESSION关闭
}
}
再之后,配置transactionManager这之后的代码,主变成了getHibernateTemplate()相关的操作,而不是getCurrentSession()的操作:
public class HibernateDAO {
public void save(Object o) {
getHibernateTemplate()完成 主要操作....
}
}
变成这样之后,但难以对事务进行提交(最上边的方法4是可以)
请问:getHibernateTemplate()来操作时,什么时候会开启Session,什么方法能够得到currentSession????? 展开
getHibernateTemplate().getSessionFactory().getCurrentSession().beginTransaction().commit()难题!
-----------------------------------
有HibernateDAO extends HibernateDaoSupport implements myDAOInterface**
其内的方法:
public void save(Object object) {
getHibernateTemplate().save(object);
}
进行添加操作的时候,能够从控制台看到SHOWSQL信息,但是数据库当中没有数据插入(我猜测是其事务没有进行提交)
于是利用以下各式进行提交:
1.getHibernateTemplate().getSessionFactory().openSession().beginTransaction().commit()
2.getHibernateTemplate().getSessionFactory().openSession().getTransaction().commit()
3.getHibernateTemplate().getSessionFactory().getCurrentSession().getTransaction().commit()
4.getHibernateTemplate().getSessionFactory().getCurrentSession().beginTransaction().commit()
其中只有4能够正常执行,并且插入数据。其它三个都发出不同异常,有的是没有事务等,有的是没有绑定SESSION的。
补充:
a.在hibernate.cfg.xml当中,已经设置了
<property name="current_session_class_name">thread</property>
(大概是以上式子,我现在在网吧,没有用自己电脑,不知道记错没?)
其中在1,2形式的错误当中,出现no session 绑 to thread
b.在applicationContext.xml当中,配置了事务管理(即仅仅配置了<bean id="transactionManager" ...>.....</bean>
疑问:
getHibernateTemplate()如果才能得到当前被ThreadLocal绑定的Session,即,除了通过getHibernateTemplate().getSessionFactory().getCurrentSession().beginTransaction().commit()来让事务提交,还有没有其它办法,让它完成提交任务???
-----------------------------
以上的疑问来自于代码的修改过程中发出的,先前的SAVE方法是:
利用<property name="current_session_class_name">thread</property>
设置之后
public class HibernateDAO {
public void save(Object o) {
HibernateUitl.打开currrentSESSION
SESSION开启事务。。。
主要操作....
事务提交。。。。
currentSESSION关闭
}
}
再之后,配置transactionManager这之后的代码,主变成了getHibernateTemplate()相关的操作,而不是getCurrentSession()的操作:
public class HibernateDAO {
public void save(Object o) {
getHibernateTemplate()完成 主要操作....
}
}
变成这样之后,但难以对事务进行提交(最上边的方法4是可以)
请问:getHibernateTemplate()来操作时,什么时候会开启Session,什么方法能够得到currentSession????? 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询