通过Spring + Hibernate只读数据

Cri*_*ris 6 java spring hibernate transactions

注意到如果我想读取一些数据,如果我没有事务上下文,我将无法这样做,因为

org.hibernate.HibernateException:找不到当前线程的Session

对于读取数据,通常不需要事务.

因此,为了让Spring管理会话,即使对于只读操作,它也需要进行交易...?

这不是开销吗?

PS.I不想手动打开和关闭会话...

非常感谢.

Boz*_*zho 4

@Transactional除了指示 spring 启动和提交事务之外,还告诉 spring 打开和关闭会话。这不是很简单,但这就是它的工作原理。因此,如果您没有@Transactional,则不会打开任何会话。以下是您的选择:

  • use @Transactional(readOnly=true)- 目的是进行只读事务。我推荐那个
  • 使用 JPAEntityManager注入@PersistenceContext. 它将为每次调用打开一个新的底层会话。不是那么好的选择。但您应该考虑使用EntityManagerreadOnly=true 事务
  • 使用附加方面/拦截器/过滤器来打开和关闭会话。这会很困难,并且您最终可能会对 hibernate 当前会话概念的 spring 实现感到困惑。