Java 与Jackson和Jax rs一起使用时如何关闭entitymanager

Java 与Jackson和Jax rs一起使用时如何关闭entitymanager,java,jakarta-ee,jpa,jax-rs,jackson,Java,Jakarta Ee,Jpa,Jax Rs,Jackson,我正在使用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.clas

我正在使用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(); }
}
严重:Servlet[JAX-RSServlet]的Servlet.service() 路径[]引发异常org.codehaus.jackson.map.JsonMappingException: 未能延迟初始化角色集合: com.company.entity.Node.childList,未关闭任何会话或会话 (通过引用链:com.company.entity.Node[“childIdList”])


我在其他类似的方法中使用事务。

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

该模式称为“视图中的开放会话”。在这里,你们可以试着在其他地方看看堆栈溢出

但您也可以尝试在谷歌或stack over flow上搜索更多帮助