gpt4 book ai didi

java - 在 JAX-RS 序列化期间保留 EntityManager session

转载 作者:太空宇宙 更新时间:2023-11-04 06:28:02 25 4
gpt4 key购买 nike

我有一个简单的 JAX-RS 资源,用于序列化 JPA 实体的 View 。 JAX-RS 资源从 DAO 获取实体,将其传递给 bean 映射器,然后序列化结果。您可能认为这很容易实现。

不。尝试转换时,我收到 LazyInitializationException。我显然丢失了 EntityManager session 。

我有一个解决方法,可以从 JAX-RS 资源而不是 DAO 上输入事务,以保留相同的 EntityManager,但这给我留下了不好的印象。

使用 CDI、JPA 和 JAX-RS,一旦我离开 DAO 启动的事务,我将如何保留 EntityManager 的 session ?

最佳答案

DAO 的目标是封装和抽象对数据层的访问。因此,DAO 应该准确提供消费者所需的数据。

由于您的 fetchType 是惰性的,您的 DAO 仅提供部分数据以及可以从数据库中获取更多数据的信息。如果没有 Activity session ,则获取数据失败。

你有两个选择:

  1. 当您尝试从 JAX-RS 资源输入交易时,但这会使您的 DAO 变得荒谬。在本例中,我只需删除 DAO 并将 EntityManager 注入(inject) JAX-RS 资源中。
  2. 按预期使用 DAO 并初始化消费者期望的所有数据。这可以通过 Hibernate.initialize(entity) 来完成或一些辅助方法,它迭代丢失的实体并简单地对每个实体调用 entity.getId()

关于java - 在 JAX-RS 序列化期间保留 EntityManager session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26511379/

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