不用Spring,如何使用Hibernate的JTA事务?

Struts1.1+Hibernate3一般将save或delete这些操作封装在单独的函数中。但在一次调用多个这种函数的时候,如果后调用的出错了,就无法将之前调用的sa... Struts1.1 + Hibernate3
一般将save或delete这些操作封装在单独的函数中。但在一次调用多个这种函数的时候,如果后调用的出错了,就无法将之前调用的save或delete回滚,因为前面的已经commit过了。
如何能即封装操作,又在调用时可以统一回滚事务,请给出代码和为什么。
问题解决马上结贴。
比如我封装的存储和删除的函数分别如下:
<!--存储函数-->
public static boolean merge(Object o) throws HibernateException {
Session s = HibernateSessionFactory.getSession();
Transaction tx = s.beginTransaction();
boolean result = false;
try {
s.merge(o);
tx.commit();
result = true;
} catch (HibernateException he) {
tx.rollback();
throw he;
} finally {
if (s != null) {
s.close();
}
}
return result;
}
<!--删除函数-->
public static boolean deleteObject(String hql) {
try {
Session s = HibernateSessionFactory.getSession();
Transaction tx = s.beginTransaction();
Query query = s.createQuery(hql);
query.executeUpdate();
tx.commit();
s.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
调用的时候先调用存储再调用删除,如果删除过程异常则想要把存储过程回滚,但我已经commit调了。
我的问题是应该如何改造这些函数?
展开
 我来答
cloud4j
2007-09-01 · 超过23用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:0
展开全部
这么写可以搞定的,我试过后才回帖的。每次不让它自动提交,即在存储方法和删除方法中,去掉 “ tx.commit(); ”一句,然后在调用储存和删除的方法中,获得返回的boolean型变量,判断,返回值都为true时就提交事务,否则就回滚事务。
代码如下:
<!--存储函数-->
.....
try {
s.merge(o);
//tx.commit();//注释掉提交
result = true;
} catch (HibernateException he) {
.....

<!--删除函数-->
......
try {
Session s = HibernateSessionFactory.getSession();
Transaction tx = s.beginTransaction();
Query query = s.createQuery(hql);
query.executeUpdate();
//tx.commit();//注释掉提交
s.close();
return true;
} catch (Exception e) {
........

<!--调用方法,判断-->
.........
Transaction tx = s.beginTransaction();
if( merge(o)&&deleteObject(hql)){
tx.commit();//返回都为true,提交事务
}else{
tx.rollback();
}
.......

注意:我在调试的过程中,出现一下异常:“Exception in thread "main" org.hibernate.SessionException: Session is closed”,是因为当前的session已被关闭,注意一下关闭session的位置就可以了!!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式