gpt4 book ai didi

java - 为什么我的实体在两次调用后变得不受管理?

转载 作者:行者123 更新时间:2023-11-30 06:36:51 25 4
gpt4 key购买 nike

在 seam-gen 生成的应用程序中,我有一个在身份验证期间检查的用户实体。我在身份 validator 中查找实体是否可用,如果是,我在 UserHome.find() 方法中加载实体。

如果它不可用,我想强制用户注册。到目前为止这有效。

但在后续调用中,如果我需要再次使用用户实体。实体变为“非托管”。我尝试将其输出到 Scope.Session 中,但这也无济于事。

每次调用 EntityHome.isManaged() 都会抛出异常,因为 EntityManager 已经关闭。

  • 问题是谁关闭了 entityManager,为什么?

  • 有没有办法防止 seam 关​​闭 entityManager 而不是使用:

    @PersistenceContext(type=PersistenceContextType.EXTENDED)
    EntityManager entityManager;

最佳答案

entityManager 是对话范围的。如果您没有在请求中开始对话(使用 @Begin),Seam 会在请求后关闭 entityManager。将实体输出到 session 范围内无济于事,因为 entityManager 无论如何都会关闭。

为了防止 Seam 关​​闭 entityManager,您要么使用您自己提到的扩展持久性上下文,要么使用对话范围的组件。根据组件的上下文和后续调用,使用对话范围可能不合适。

如果将实体导出到 session 范围。您可以在后续调用中使用 entityManager.find(.)entityManager.getReference(.) 将其重新附加到新的 entityManager。

关于java - 为什么我的实体在两次调用后变得不受管理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4237860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com