通过 Web 服务返回 JAXB 对象时出现 JPA LazyInitializationException
我正在与 JBoss 合作。我创建了一个简单的 JAX-RS Web 服务,它从数据库检索 JPA 实体并将其返回给用户。一旦我与另一个实体建立了关系(@OneToOne),我就会收到 LazyInitializationException。原因很简单:关系未由 JPA(延迟加载)初始化,并且当 jaxb 尝试序列化它时,一切都会中断。
但我该如何解决这个问题呢?
在归还物品之前我可以触及这种关系。对于更大的对象网络来说,既不美观也不复杂。
我可以扩展我的 Persistence 上下文,因此我的会话在 jaxb 序列化期间仍然处于活动状态。好主意,但是怎么做呢?
有没有标准的、最佳实践的方法来解决我的问题?
劳雷斯
I'm working with JBoss. i created a simple JAX-RS Webservice that retrieves a JPA Entitiy from the database and returns it to the user. As soon as I have a relationship (@OneToOne) to another Entity I get a LazyInitializationException. The Reason is simple: The Relationship was not initialized by JPA (lazy loading) and when jaxb tries to serialize it, everything breaks.
But how do i solve this?
I could touch the relationship before i return the object. Not nice and complex for greater object networks.
I could extend my Persistence context, so my session is still active during jaxb serialization. Great idea, but how?
Is there a standart, best practice way to solve my problem.
Laures
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在处理 JPA 实体时,您需要确保注释属性(访问器)而不是字段(实例变量)。
下面是使用 JAX-RS、JAXB 和 JPA 创建 JAX-RS 服务的示例:
You will need to ensure you are annotation the properties (accessors) and not the fields (instance variables), when dealing with JPA entities.
Below is an example of creating a JAX-RS service with JAX-RS, JAXB, and JPA:
您必须使用@XmlTransient 注释来防止关系被序列化。
You have to use
@XmlTransient
annotation to prevent the relationship from being serialized.您可以更改关系注释以急切地获取对象。
You could change the relationship annotation to eagerly fetch the object.