java – 通过Spring Hibernate只读数据

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

org.hibernate.HibernateException: No Session found for current thread

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

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

这不是开销吗?

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

非常感谢.

最佳答案
@Transactional告诉spring打开和关闭一个会话,除了指示它启动并提交一个事务.这不是很简单,但它是如何工作的.因此,如果您没有@Transactional,则不会打开任何会话.以下是您的选择:

>使用@Transactional(readOnly = true) – 目的是拥有只读事务.我推荐一个
>使用注入了@PersistenceContext的JPA EntityManager.它将为每次调用打开一个新的基础会话.不是那么好的选择.但是您应该考虑将EntityManager与readOnly = true事务一起使用
>使用其他方面/拦截器/过滤器来打开和关闭会话.这很难,你最终会对hibernate当前会话概念的spring实现感到困惑.

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...