0
我正在使用Spring并使用hibernate和JPA。当我为我的方法提供一个事务上下文时,我想知道它是如何工作的。例如,我有一些实体类人员。我创建了一个人bob
并坚持实体。如果我致电getPersonByName("bob")
,它会在交易结束前返回bob吗?了解事务如何工作
我正在使用Spring并使用hibernate和JPA。当我为我的方法提供一个事务上下文时,我想知道它是如何工作的。例如,我有一些实体类人员。我创建了一个人bob
并坚持实体。如果我致电getPersonByName("bob")
,它会在交易结束前返回bob吗?了解事务如何工作
简短的回答是:它取决于您的读取操作是如何实施的。
您可以打开日志记录并设置一个测试工具查看自己。您可以关注these instructions to enable SQL queries and parameters printing。
2注意事项:
@Transactional
方法(S)与默认传播级)休眠中一级缓存默认为激活状态。它与休眠会话相关联,并且由其获取的所有实体都存储在会话中。 因此,写入后的后续读取不应在同一会话内往返于数据块。
现在Hibernate的1级高速缓存不使用默认情况下,除非你使用:
如果您的意思是说持久性(保存)和检索(getPersonByName)是同一方法的一部分,那么它将不会返回,因为当方法执行完成并且线程存在方法时持久化对象。 如果持久性和检索在具有不同事务边界的两种方法中分离出来,那么它将起作用。 –