通过Webservice返回JAXB对象时的JPA LazyInitializationException

时间:2011-05-13 09:38:41

标签: jpa jboss jaxb jax-rs jboss6.x

我正在使用JBoss。我创建了一个简单的JAX-RS Web服务,它从数据库中检索JPA Entitiy并将其返回给用户。一旦我与另一个实体建立了关系(@OneToOne),我就会得到一个LazyInitializationException。原因很简单:JPA(延迟加载)没有初始化关系,当jaxb尝试序列化时,一切都会中断。

但我该如何解决这个问题?

在我返回物体之前,我可以触摸这种关系。对于更大的对象网络来说,这并不好看和复杂。

我可以扩展我的持久化上下文,所以我的会话在jaxb序列化期间仍处于活动状态。好主意,但是怎么样?

有没有一种标准的最佳实践方法来解决我的问题。

Laures

3 个答案:

答案 0 :(得分:0)

您必须使用@XmlTransient注释来阻止关系序列化。

答案 1 :(得分:0)

在处理JPA实体时,您需要确保注释属性(访问者)而不是字段(实例变量)。

以下是使用JAX-RS,JAXB和JPA创建JAX-RS服务的示例:

答案 2 :(得分:0)

您可以更改关系注释以急切地获取对象。

@OneToOne(fetch=FetchType.EAGER)