I have 3 tables connected to each other. And when I try to display a table with its dependencies, I get an error java.lang.StackOverflowError: null
@Entity
@Table(name = "person")
@Data
@NoArgsConstructor
public class Person {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@Column(name = "role")
private String role;
@OneToMany(mappedBy = "person")
private List<Tool> toolsList;
}
@Entity
@Table(name = "tool")
@Data
@NoArgsConstructor
public class Tool {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "tool_name")
private String tool_name;
@Column(name = "cost")
private int cost;
@ManyToOne
@JoinColumn(name = "person_id", referencedColumnName = "id")
private Person person;
@ManyToOne
@JoinColumn(name = "brand_id", referencedColumnName = "id")
private Brand brand;
}
@Entity
@Table(name = "brand")
@Data
@NoArgsConstructor
public class Brand {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "brand_name")
private String brandName;
@OneToMany(mappedBy = "brand")
private List<Tool> toolList;
}
@GetMapping("/report")
public ResponseEntity<?> getReport() {
return new ResponseEntity<>(new BodyResponse(HttpStatus.OK.toString(), "People report: " + personService.getPersons().toString() + "n"
+ "Brand report: " + brandService.getBrands().toString() + "n"
+ "Instrument report: " + toolService.getTools().toString()), HttpStatus.OK);
}
I’m trying to run this code and I’m getting the following errors
2024-05-09T13:05:38.723+03:00 ERROR 8996 --- [CrudSecurityRestApplication] [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : 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 org.hibernate.collection.spi.PersistentBag.toString(PersistentBag.java:589) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final]
at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453) ~[na:na]
at com.slizokav.MusicToolsRestApi.model.Person.toString(Person.java:12) ~[classes/:na]
at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453) ~[na:na]
at com.slizokav.MusicToolsRestApi.model.Tool.toString(Tool.java:10) ~[classes/:na]
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:590) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final]
at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453) ~[na:na]
at com.slizokav.MusicToolsRestApi.model.Person.toString(Person.java:12) ~[classes/:na]
at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453) ~[na:na]
at com.slizokav.MusicToolsRestApi.model.Tool.toString(Tool.java:10) ~[classes/:na]
I looked that it has to do with bidirectional relation and lombook annotations, but I changed @Data to @Setter and @Getter and got this output
enter image description here
New contributor
Anna Kakanka is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.