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

为什么spring jpa没有会话异常错误

冉德元
2023-03-14

我使用springboot和spring jpa作为我的后端框架。在访问jpa存储库中的实体时,我遇到了以下异常。

    2016-08-16 20:39:27.528 ERROR 19243 --- [http-nio-8090-exec-8] [.[.[.[.c.c.Go2NurseJerseyConfiguration] : Servlet.service() for servlet [com.cooltoo.config.Go2NurseJerseyConfiguration] in context with path [] threw exception [org.hibernate.LazyInitializationException: could not initialize proxy - no Session] with root cause

org.hibernate.LazyInitializationException: could not initialize proxy - no Session
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:165) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final]
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:286) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final]
    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final]
    at com.cooltoo.go2nurse.entities.UserEntity_$$_jvst80d_8.getPassword(UserEntity_$$_jvst80d_8.java) ~[com.cooltoo.go2nurse-common-1.0.0-SNAPSHOT.jar!/:na]
@Transactional
private UserBean registerWithChannel(String name, int gender, String strBirthday, String mobile, String password, String smsCode, String channel, String channelid) {
       currentUser = repository.findByMobile(mobile);
        //already existed such user, link with channel user
       UserBean userBean = updatePassword(currentUser.getId(), currentUser.getPassword(), password);
       loginService.login(mobile, password);

} 

@Transactional
public UserBean updatePassword(long userId, String oldPassword, String newPassword) {
        logger.info("modify the password by userId={} oldPwd={} newPwd={}",
                userId, oldPassword, newPassword);

        UserEntity user = repository.getOne(userId);
        if (null==user) {
            throw new BadRequestException(ErrorCode.RECORD_NOT_EXIST);
        }

        boolean changed = false;

        // check password
        if (user.getPassword().equals(oldPassword)) { //the exception happens here

        }
        ...
    }

@Transactional注释有什么问题吗?还是因为我在两个方法中使用了相同的UserEntity?

共有1个答案

梁学真
2023-03-14

将类标记为@Transactional,那么Spring将处理会话管理而不是方法。@Transactional public class My class{...}通过使用@Transactional,可以自动处理事务传播等许多重要方面。在这种情况下,如果调用另一个事务性方法,则该方法可以选择加入正在进行的事务,从而避免“无会话”异常。

也可以使用传播

 类似资料:
  • org.openqa.selenium.NoSuchSessionException:会话ID为空。在调用退出()后使用WebDriver?构建信息:版本:“3.141.59”,修订版:“e82be7d358”,时间:“2018-11-14T08:17:03”系统信息:主机:“DESKTOP-NLBMRCD”,IP:“192.168.1.15”,os.name:“Windows 10”,os.ar

  • 我的tmp目录无法通过php访问。因此,会话不能真正工作(他们没有),但在这种情况下,他们做了一些未知的原因。 这是一个场景, 我有一个页面index.php验证用户的凭据和设置会话变量,并将用户重定向到panel.php panel.php我有密码, 当我登录通过index.php,虽然会话数据无法读取,panel.php打开像它通常与会话 刷新页面时,会话消失,页面重定向! 对这种行为有什么解

  • 问题内容: 我正进入(状态 : 当我尝试运行以下 (尽管不完整) 代码段时: 在如下所示: 我正在尝试和班级之间建立联系。 发生此异常的原因是什么? 我创建了两个表并使用以下sql命令: POJO 人 地址 问题答案: 对于多对多关系交换,您需要专用的映射表 6.2.4。价值和多对多关联的集合 即,您需要类似PersonAddress表的内容 其中p_id是对人员表的FK引用,而a_id是对地址表

  • 问题内容: 我正进入(状态 : 当我尝试运行以下 (尽管不完整) 代码段时: 在如下所示: 我正在尝试和班级之间建立联系。 发生此异常的原因是什么? 我创建了两个表并使用以下sql命令: POJO 人 地址 问题答案: 对于ManyToMany Relationshhip,您需要专用的映射表 6.2.4。价值和多对多关联的集合 即,您需要类似PersonAddress表的内容 其中p_id是对人员

  • 问题内容: 执行以下方法时: 被扔。这可能是什么原因? 问题答案: 这可能是什么原因? 我不知道其余的内容,但是我遇到的大多数PC使用8位或16位的“位深度”,而使用24位。它表示非常精细的记录质量。如果8位是“电话质量”,而16位是“ CD质量”,则24位将是“主录音质量”。