是否可以使用@transactional注释与手动打开的事务(spring / hibernate)

时间:2015-04-01 16:11:57

标签: java spring hibernate transactions

我有一个spring应用程序,可以使用hibernate和annotations。 我手动打开一个会话,就像这个How do I manually open a hibernate session?堆栈溢出答案一样。

现在我想在打开会话本身的方法中使用服务方法。但是,此服务使用事务声明进行注释。是否有可能告诉方法使用刚刚手动打开的交易?

e.g。

@Transactional("TransactionManager")
class Service1  {

   public LazyObject someMethod();

}

class MetaService {

   @Autowired
   SessionFactory sf;

   Service1 s1;

   public someMethod() {
        Session s = sf.openSession();
        s.beginTransaction();

        // tell this method to use s's transaction
        // without annotating someMethod() with @transactional
        LazyObject lo = s1.someMethod();

        for ( LazyAtt la : lo.getLazyAtt() ) {
            la.doSomething();
        }

        s.flush();
        s.getTransaction().commit();
        s.close();
   }
}

对于那些想知道我为什么要这样做的人,请查看以下问题: https://stackoverflow.com/questions/29363634/how-to-open-two-sessions-in-one-function-in-hibernate-spring

0 个答案:

没有答案