我有一个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