我本人已经遇到了很多次。通常,我的第一个建议是Spring事务管理,但是据我了解,您正在尝试限制所使用的第三方库的数量。
由于您在HibernateUtil类中使用静态API,因此您可能会发现将逻辑合并到方法中并将“您要在事务中执行的操作”代码(因控制器而异)放在回调中可能会有所帮助。
。
首先,定义一个接口来描述每个控制器的inTransaction行为:
public interface TransactionCallback { void doInTransaction();}现在,在您的HibernateUtil类中创建一个静态方法来处理开始,提交,并在必要时回滚事务:
public class HibernateUtil { public static void inTransaction(TransactionCallback tc) { Transaction transaction = HibernateUtil.getSessionFactory().getCurrentSession().getTransaction(); if (!HibernateUtil.getSessionFactory().getCurrentSession().getTransaction().isActive()) { transaction.begin(); try { tc.doInTransaction(); transaction.commit(); } catch (Exception e) { transaction.rollback(); } } }}在控制器中,您可以将新方法与匿名内部类一起使用:
.... HibernateUtil.inTransaction(new TransactionCallback() { void doInTransaction() { // do stuff for this controller } });....这种方法至少应该照顾好您要消除的重复项,并且有足够的扩展空间来处理特定的异常等。



