使用 eclipselink 的 JPA Stackoverflow 异常

当我试图从我的应用程序中获取一个项目或项目列表时,我得到了一个java.lang.StackOverflowError例外。


我将 JPA 与 eclipselink 一起使用。


我得到以下堆栈跟踪:


java.lang.StackOverflowError

java.lang.StackOverflowError

    at java.util.concurrent.ConcurrentHashMap$BaseIterator.<init>(ConcurrentHashMap.java:3391)

    at java.util.concurrent.ConcurrentHashMap$ValueIterator.<init>(ConcurrentHashMap.java:3430)

    at java.util.concurrent.ConcurrentHashMap$ValuesView.iterator(ConcurrentHashMap.java:4683)

    at org.eclipse.yasson.internal.ComponentMatcher.searchComponentBinding(ComponentMatcher.java:187)

    at org.eclipse.yasson.internal.ComponentMatcher.getSerializerBinding(ComponentMatcher.java:143)

    at org.eclipse.yasson.internal.serializer.SerializerBuilder.build(SerializerBuilder.java:73)

    at org.eclipse.yasson.internal.serializer.ObjectSerializer.marshallProperty(ObjectSerializer.java:102)

    at org.eclipse.yasson.internal.serializer.ObjectSerializer.serializeInternal(ObjectSerializer.java:61)

    at org.eclipse.yasson.internal.serializer.AbstractContainerSerializer.serialize(AbstractContainerSerializer.java:63)

    at org.eclipse.yasson.internal.serializer.AbstractContainerSerializer.serializerCaptor(AbstractContainerSerializer.java:95)

我尝试了在多个网站上找到的多种解决方案:


json忽略

Jsonmanagedreference & Jsonbckreference

JsonIgnoreProperties

JsonIdentityInfo

实体图

即使上面列出的所有内容都应该工作,但它们似乎都没有工作。到目前为止,我发现的唯一“解决方案”是删除吸气剂,但这消除了建立双向关系的目的,因为您无法访问它们。


有谁知道我做错了什么,或者有人有其他可行的解决方案吗?


拉丁的传说
浏览 80回答 1
1回答

largeQ

搜索了一段时间后,我发现我必须使用 ObjectMapper 来触发 Json 注释。适用于@JsonIgnore,&nbsp;@JsonBackReference,&nbsp;@JsonManagedReference,&nbsp;@JsonIgnoreProperties&&nbsp;@JsonIdentityInfo。在我的控制器中更改以下行:return&nbsp;Response.status(Response.Status.OK).entity(&nbsp;roleService.all()).build();至:return&nbsp;Response.status(Response.Status.OK).entity(new&nbsp;ObjectMapper().writeValueAsString(roleService.all())).build();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java