gpt4 book ai didi

java - 与 Jackson 和 Jax-rs 一起使用时如何关闭实体管理器

转载 作者:行者123 更新时间:2023-11-30 09:37:28 25 4
gpt4 key购买 nike

我正在使用 JPA( hibernate )、JAX-RS( Jersey )和 Jackson。

在构建并发送数据包后如何关闭我的实体管理器?

以下不起作用并给我一个错误。它似乎在响应完成之前调用 em.close() 。

@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getNode( @QueryParam("nodeId") long nodeId ){
try {
Node node = em.find(Node.class, nodeId);
if (node == null) throw new WebApplicationException(Response.Status.NOT_FOUND);
Response response = Response.ok(node, MediaType.APPLICATION_JSON).build();
return response;
}
finally { em.close(); }
}

SEVERE: Servlet.service() for servlet [JAX-RS Servlet] in context with path [] threw exception org.codehaus.jackson.map.JsonMappingException: failed to lazily initialize a collection of role: com.company.entity.Node.childList, no session or session was closed (through reference chain: com.company.entity.Node["childIdList"])

我正在使用其他类似方法的交易。

最佳答案

对此的解决方案是创建一个过滤器 - 它将在为您管理事务的 jaxb servlet 之前运行。网上有几个这样的例子。

该模式称为“在 View 中打开 session ”。在 stack over flow 上,您可以尝试 Filter do not initialize EntityManager和其他地方看看...

http://www.naildrivin5.com/daveblog5000/?p=39

http://chstath.blogspot.com/2007/11/extending-transaction-boundaries-beyond.html

但您也可以尝试在 google 或 stack over flow 上搜索以获得更多帮助。

关于java - 与 Jackson 和 Jax-rs 一起使用时如何关闭实体管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10441039/

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