注意到如果我想读取一些数据,如果我没有事务上下文,我将无法这样做,因为
org.hibernate.HibernateException:找不到当前线程的会话
对于读取数据,通常不需要交易。
因此,为了让Spring管理会话,即使对于只读操作,它也需要进行交易......?
这不是开销吗?
PS。我不想手动打开和关闭会话......
非常感谢。
答案 0 :(得分:4)
@Transactional
告诉spring打开和关闭一个会话。这不是很简单,但它是如何工作的。因此,如果您没有@Transactional
,则不会打开任何会话。您可以选择以下选项:
@Transactional(readOnly=true)
- 目的是拥有只读事务。我推荐一个EntityManager
的JPA @PersistenceContext
。它将为每次调用打开一个新的基础会话。不是那么好的选择。但是您应该考虑将EntityManager
与readOnly = true事务