使用Spring sessionFactory注入。
@SuppressWarnings("unchecked")
public void getData() {
System.out.println("%%%% Hibernate fetching data %%%% ");
Session session = factory.getCurrentSession();
/*
* try { Thread.sleep(10000); } catch (InterruptedException e) { // TODO
* Auto-generated catch block e.printStackTrace(); }
*/
List<Address> addresses = session.createQuery("from Address").list();
System.out.println("Total Connectins = "
+ factory.getStatistics().getConnectCount());
for (Address address : addresses) {
System.out.println(address);
}
}
上面的代码是异常
org.hibernate.HibernateException: No Session found for current thread
但是当此方法标记为 @Transactional 时,它正常工作。 但我不希望为此方法启用任何事务。
我错过了什么......?
答案 0 :(得分:1)
交易如何运作。通过标记该方法@Transactional
,您要求TransactionManager
使用SessionFactory
中的新事务会话创建并启动新事务。没有事务,Hibernate不会在数据库中创建Session
。它创建Transaction
的原因是,如果出现问题,Hibernate可以轻松回滚您在一次交易中所做的事情。
如果没有@Transactional
,Hibernate会假定您不需要与数据库进行交互。我建议你继续阅读Spring documentation,因为你似乎对这项技术的运作方式感到很困惑。通过了解正在发生的事情,将大大提高您在撰写此类内容时的效率。