Was kann einen java.lang.StackOverflowError
verursachen? Der Stack-Ausdruck, den ich erhalte, ist überhaupt nicht sehr tief (nur 5 Methoden).
Antworten
Zu viele Anzeigen?Wenn ein Methodenaufruf von einer Java-Anwendung ausgelöst wird, wird ein Stapelrahmen im Aufrufstapel zugewiesen. Der Stapelrahmen enthält die Parameter der aufgerufenen Methode, ihre lokalen Parameter und die Rücksprungadresse der Methode.
Die Rücksprungadresse bezeichnet den Ausführungspunkt, von dem aus die Programmabarbeitung nach der Rückkehr der aufgerufenen Methode fortgesetzt wird. Wenn kein Platz für einen neuen Stapelrahmen vorhanden ist, wird der StackOverflowError von der Java Virtual Machine (JVM) geworfen.
Der häufigste Fall, der möglicherweise den Stapel einer Java-Anwendung erschöpft, ist die Rekursion.
Bitte werfen Sie einen Blick darauf
Wie man StackOverflowError löst
Ich habe ein Programm mit Hibernate erstellt, in dem ich zwei POJO-Klassen erstellt habe, die jeweils ein Objekt des anderen als Datenelemente haben. Als ich im Hauptprogramm versuchte, sie in der Datenbank zu speichern, habe ich auch diesen Fehler erhalten.
Dies geschieht, weil sich beide Klassen gegenseitig referenzieren und somit eine Schleife erzeugen, die diesen Fehler verursacht.
Überprüfe also, ob in deinem Programm solche Beziehungen existieren.
Stack Overflow-Ausnahmen können auftreten, wenn ein Thread-Stapel so groß wird, dass er das maximale Limit erreicht.
Anpassen der Stapelgrößen (Xss und Xmso) Optionen...
Ich schlage vor, dass Sie diesen Link sehen: http://www-01.ibm.com/support/docview.wss?uid=swg21162896 Es gibt viele mögliche Ursachen für einen StackOverflowError, wie Sie im Link sehen können....
Ich hatte das gleiche Problem
Role.java
@ManyToMany(mappedBy = "roles", fetch = FetchType.LAZY,cascade = CascadeType.ALL)
Set businessUnits =new HashSet<>();
BusinessUnitMaster.java
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(
name = "BusinessUnitRoles",
joinColumns = {@JoinColumn(name = "unit_id", referencedColumnName = "record_id")},
inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "record_id")}
)
private Set roles=new HashSet<>();
Das Problem ist, dass, wenn Sie BusinessUnitMaster und Role erstellen müssen Sie das Objekt auf beiden Seiten speichern für RoleService.java
roleRepository.save(role);
für BusinessUnitMasterService.java
businessUnitMasterRepository.save(businessUnitMaster);