通过 Web 服务返回 JAXB 对象时出现 JPA LazyInitializationException

发布于 2024-11-07 00:20:19 字数 359 浏览 1 评论 0原文

我正在与 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不打扰别人 2024-11-14 00:20:19

在处理 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:

水波映月 2024-11-14 00:20:19

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

You have to use @XmlTransient annotation to prevent the relationship from being serialized.

打小就很酷 2024-11-14 00:20:19

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

@OneToOne(fetch=FetchType.EAGER)

You could change the relationship annotation to eagerly fetch the object.

@OneToOne(fetch=FetchType.EAGER)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文