我有一个名为Track的实体与我的源实体关联.如果我的跟踪实体中有数据并且它与源关联,则我无法在源存储库中使用findById或findAll查询,并且会出现如下错误

我得到这个错误:

Servlet.service() for servlet \[dispatcherServlet\] in context with path \[\] threw exception \[Handler dispatch failed: java.lang.StackOverflowError\] with root cause

java.lang.StackOverflowError: null at com.encode.atlas.encoder.entity.track.Track.toString(Track.java:7) \~\[classes!/:0.0.1-SNAPSHOT\] at java.base/java.lang.String.valueOf(String.java:4220) \~\[na:na\] at java.base/java.lang.StringBuilder.append(StringBuilder.java:173) \~\[na:na\] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) \~\[na:na\] at org.hibernate.collection.spi.PersistentBag.toString(PersistentBag.java:585) \~\[hibernate-core-6.1.7.Final.jar!/:6.1.7.Final\] at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453) \~\[na:na\] at com.encode.atlas.encoder.entity.track.Source.toString(Source.java:9) \~\[classes!/:0.0.1-SNAPSHOT\] at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453) \~\[na:na\] at com.encode.atlas.encoder.entity.track.Track.toString(Track.java:7) \~\[classes!/:0.0.1-SNAPSHOT\] at java.base/java.lang.String.valueOf(String.java:4220) \~\[na:na\] at java.base/java.lang.StringBuilder.append(StringBuilder.java:173) \~\[na:na\] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) \~\[na:na\] at org.hibernate.collection.spi.PersistentBag.toString(PersistentBag.java:585) \~\[hibernate-core-6.1.7.Final.jar!/:6.1.7.Final\] at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453) \~\[na:na\] at com.encode.atlas.encoder.entity.track.Source.toString(Source.java:9) \~\[classes!/:0.0.1-SNAPSHOT\] at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453) \~\[na:na\] at com.encode.atlas.encoder.entity.track.Track.toString(Track.java:7) \~\[classes!/:0.0.1-SNAPSHOT\] at java.base/java.lang.String.valueOf(String.java:4220) \~\[na:na\] at java.base/java.lang.StringBuilder.append(StringBuilder.java:173) \~\[na:na\] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) \~\[na:na\] at org.hibernate.collection.spi.PersistentBag.toString(PersistentBag.java:585) \~\[hibernate-core-6.1.7.Final.jar!/:6.1.7.Final\] at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453) \~\[na:na\] at com.encode.atlas.encoder.entity.track.Source.toString(Source.java:9) \~\[classes!/:0.0.1-SNAPSHOT\] at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453) \~\[na:na\] at com.encode.atlas.encoder.entity.track.Track.toString(Track.java:7) \~\[classes!/:0.0.1-SNAPSHOT\] at java.base/java.lang.String.valueOf(String.java:4220) \~\[na:na\]

我的来源实体:

@Data

@Entity

public class Source {


@Id  @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;

private String name;

private String path;

private Integer duration;

@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY)

private List\<Track\> tracks = new ArrayList\<\>();

}

我的跟踪实体:

@Data

@Entity

public class Track {

@Id

@GeneratedValue

(strategy = GenerationType.IDENTITY)

private Long id;

@ManyToOne(cascade = CascadeType.ALL)

@JsonBackReference

private Source source;

private Integer index;

private String codecType;

private String pixelFormat;

private Integer width;

private Integer height;

private Integer bitrate;

private Double fps;

private String codec;

private Integer sampleRate;

private String channel;

}

查询==我不知道.

' Source source = sourceBRepository.findById(Job.getSource().getId().orElseThrow();'

我使用的是Java 17和Spring 3.0.7版本

我已经try 使用FetchType.LAZY和FetchType.EAGER以及@JsonBackReference,但没有起作用.

推荐答案

您正在使用Lombok Data注释,该注释将生成equals/hashCode/toString,并且由于您具有双向关系,因此这将导致StackOverFlow错误.其中一种方法被称为.

你必须打破龙目岛的这个循环.对于to字符串,您可以使用

@ToString.Exclude

排除周期的一侧.

IMO您不应该将@Data与JPA一起使用,因为生成的equals/hashCode方法不正确.

在这里阅读更多信息: https://thorben-janssen.com/lombok-hibernate-how-to-avoid-common-pitfalls/

Java相关问答推荐

如何在Java中使用Rest模板通过查询参数发送GET请求

在正确位置绘制多边形的PFA问题

我应该避免在Android中创建类并在运行时编译它们吗?

Android视图覆盖不阻止点击它后面的控件

取消按钮,但没有任何操作方法引发和异常

Exe4j创建的应用程序无法再固定在任务栏Windows 11上

在springboot 3中,当我调用api endpoint时,会出现404

将带有js文件的 bootstrap 程序导入maven项目时出错

Mapstruct不能正确/完全映射属性

Java流传输一个列表并创建单个对象

我如何解释这个错误?必需类型:供应商R,提供:收集器对象,捕获?,java.util.List java.lang.Object>>

@Rollback @ Transmission在验收测试中不工作

Spring Boot&;Docker:无法执行目标org.springframework.boot:spring-boot-maven-plugin:3.2.0:build-image

为什么Collectors.toList()不能保证易变性

Java中不兼容的泛型类型

如何配置空手道以使用FeignClient或RestTemplate代替ApacheHttpClient

STREAMS减少部分结果的问题

为什么JavaFX MediaPlayer音频播放在Windows和Mac上运行良好,但在Linux(POPOS/Ubuntu)上却有问题?

如何在Spring Boot中为不同的部署环境管理多个.properties文件?

基于距离的APACHE POI公式判断