当前位置: 首页 > 知识库问答 >
问题:

@Transactional中的会话会发生什么

汪理
2023-03-14

嗨,一个星期以来,我一直在追踪我的办公代码中的一个错误。它与Spring、Hibernate和Transaction有关。

我所知道的:
1.延迟加载。
2. Spring如何使用代理和拦截器进行事务管理。
3. Spring中的事务传播,我们的代码使用默认的REQUIRED。
4.每个请求/会话的会话和Hibernate的分离实体基础来保持会话,以及我们的会话不是每个会话的事实。

我的场景:我的代码中的一个方法(由其他人编写)使用@Transactional(- 调用方法 a())并调用另一个使用 Hibernate 从数据库加载客户的服务方法(- 将其称为方法 b())。b() 也有@Transactional。客户有许多 Lazy 字段,当控件返回到方法 a() 时 , 由于会话已关闭,因此无法加载惰性字段。我不明白的是 - 为什么当方法a()尚未完成时会话关闭?当 b() 完成时,Spring如何处理会话?我不介意被指向一个网址。

我有更多的问题,因为我已经搞了一个星期了,但是我不想在不了解会议情况的情况下弄脏这篇文章。

请建议。

共有1个答案

祁承望
2023-03-14

保持@Transactional在你的服务方法上。进行getXXX()调用,从同一个服务方法a()加载返回实体对象的惰性属性。还有另一个很酷的选择。Hibernate获取配置文件。在实体上定义获取配置文件,并从您的服务或dao将其设置为活动的。

 类似资料:
  • 问题内容: 我想知道当你使用注释方法时实际发生了什么?当然,我知道Spring将把该方法包装在Transaction中。 但是,我有以下疑问: 听说Spring创建了代理类?有人可以更深入地解释这一点。该代理类中实际包含什么?实际班级会怎样?我怎么能看到Spring创建的代理类 我还在Spring文档中读到: 注意:由于此机制基于代理,因此仅会拦截通过代理传入的“外部”方法调用。这意味着“自调用”

  • 问题内容: 这是大多数DAO中使用的典型设置: 我看到只有呼叫,否或。 因此,当我从不在会话中返回实体时,无法加载惰性集合。类似地,保存似乎总是同花顺! Spring 的注解本身就具有开启和关闭会话以及交易的魔力吗? 问题答案: 在Spring中,由划定的业务交易与hibernate之间存在一一对应的关系。 也就是说,当通过调用方法开始业务交易时,将创建hibernate会话(Transactio

  • 问题内容: 到目前为止,我了解Java中的Httpsession概念。 将根据请求创建一个会话对象。 将“字符串”和值与Session对象绑定。 将返回与指定字符串相关联的对象。 我无法理解的是:我正在创建一个会话对象 ,并通过调用为其设置名称。在这里,此代码位于服务器内部。对于每个人,当他尝试登录时,将在服务器中执行相同的代码。在此方法中,字符串值是一个常量。因此,创建的每个会话对象都将由我提供

  • Grails GORM with Transaction和groovy。sql。如果我将存储过程的Sql调用放入带事务的Sql中,Sql将使用相同的连接?例如: 假设我有一个命令: 然后我有一个服务来处理这个命令

  • 成功登录后,我想用新的url继续进行进一步的请求处理。但url正在调用springmvc中的公开服务,其中的安全配置不会检查会话身份验证以获取传入url。请看下面的代码。 当jsp页面提交登录验证时,J_security_check调用目标url,该URL随后调用拦截器模式/home*并验证登录凭证。 如果我在登录之前调用公开的服务“/address/userid/”,它将直接调用服务方法,使其成