我有一个简单的JAX-RS资源,用于序列化JPA实体的视图。 JAX-RS资源从DAO获取实体,将其传递给bean映射器,然后序列化结果。您认为这很容易实现。
不。在尝试转换时,我得到一个LazyInitializationException。我显然已经失去了EntityManager会话。
我有一个解决方法,我将从JAX-RS资源而不是在DAO上输入一个事务,以保留相同的EntityManager,但这会让我的口味不好。
使用CDI,JPA和JAX-RS,在DAO启动事务后,如何保留我的EntityManager会话?
答案 0 :(得分:1)
DAO的目标是封装和抽象对数据层的访问。所以DAO应该提供消费者所需的数据。
由于你的fetchType是懒惰的,你的DAO只提供一部分数据,其中包含可以从数据库中获取更多数据的信息。在没有活动会话的情况下获取数据失败。
您有两种选择:
entity.getId()
。 答案 1 :(得分:0)
我的观点是你的DAO应该返回一个已初始化所有必需关系的实体。 JAX-RS资源的作用应该只是序列化你给它的任何东西,它不应该担心懒惰的关系。