Hibernate:deleted object would be re-saved by cascade (remov
Hibernate多表关联的时候的异常:deleted object would be re-saved by cascade (remove deleted object from associations): []。 【产生原因】 表之间的一对多(多对一)关联,两种情况:双表一对多多对一,单表自关联一对多多对一。表现为:删除“多”的
Hibernate多表关联的时候的异常:deleted object would be re-saved by cascade (remove deleted object from associations): []。
【产生原因】表之间的一对多(多对一)关联,两种情况:双表一对多多对一,单表自关联一对多多对一。表现为:删除“多”的一方的条目的时候出现这个异常。
【具体环境背景】楼主是在单表自关联(双向一对多多对一)出现的,建表细节:
<code class=" hljs java"><span class="hljs-annotation">@Entity</span> <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Department</span> {</span> <span class="hljs-keyword">private</span> Long id; <span class="hljs-keyword">private</span> Set<User> users = <span class="hljs-keyword">new</span> HashSet<User>(); <span class="hljs-keyword">private</span> Department parent; <span class="hljs-keyword">private</span> Set<Department> children = <span class="hljs-keyword">new</span> HashSet<Department>(); <span class="hljs-keyword">private</span> String name; <span class="hljs-keyword">private</span> String description; <span class="hljs-annotation">@Id</span> <span class="hljs-annotation">@GeneratedValue</span> <span class="hljs-keyword">public</span> Long <span class="hljs-title">getId</span>() { <span class="hljs-keyword">return</span> id; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setId</span>(Long id) { <span class="hljs-keyword">this</span>.id = id; } <span class="hljs-annotation">@ManyToOne</span>(cascade=CascadeType.MERGE) <span class="hljs-annotation">@JoinColumn</span>(name=<span class="hljs-string">"parent_id"</span>) <span class="hljs-keyword">public</span> Department <span class="hljs-title">getParent</span>() { <span class="hljs-keyword">return</span> parent; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setParent</span>(Department parent) { <span class="hljs-keyword">this</span>.parent = parent; } <span class="hljs-annotation">@OneToMany</span>(mappedBy=<span class="hljs-string">"parent"</span>,cascade=CascadeType.ALL,fetch=FetchType.EAGER) <span class="hljs-keyword">public</span> Set<Department> <span class="hljs-title">getChildren</span>() { <span class="hljs-keyword">return</span> children; } <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setChildren</span>(Set<Department> children) { <span class="hljs-keyword">this</span>.children = children; } }</code>
可见是Department部门表的自关联,每个部门都有一个上级部门和一个下级部门。我们理想状态的删除是:删除一个部门,1、它所有的下级部门级联删除,2、所有的上级部门不发生任何变化。
【解决方法!!!】由异常信息得知:deleted object would be re-saved by cascade (remove deleted object from associations)—->删除掉的对象将会被级联第二次保存(从绑定的联系上移除已经被删除的对象)。这说明我们已经做到了删除但是却由于级联(cascade)的原因,删除的对象又被利用了等等……,所以要做的是解决办法是:把@OneToMany里的cascade=CascadeType.ALL改成cascade=CascadeType.REMOVE。其他无关。
**【总结】**1、善于阅读思考异常内容。
2、cascade=CascadeType.ALL慎用,无论是在Many的一方还是One的一方。
3、当然,扎实基础是关键。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Hibernate in das SpringBoot-Projekt integrieren Vorwort Hibernate ist ein beliebtes ORM-Framework (Object Relational Mapping), das Java-Objekte Datenbanktabellen zuordnen kann, um Persistenzvorgänge zu erleichtern. Im SpringBoot-Projekt kann uns die Integration von Hibernate dabei helfen, Datenbankoperationen einfacher durchzuführen. In diesem Artikel wird die Integration von Hibernate in das SpringBoot-Projekt vorgestellt und entsprechende Beispiele bereitgestellt. 1.Abhängigkeiten einführenFügen Sie die folgenden Abhängigkeiten in die Datei pom.xml ein: org.springframework.bootspring-boot-starter-data-jpam

Java ist eine objektorientierte Programmiersprache, die im Bereich der Softwareentwicklung weit verbreitet ist. Hibernate ist ein beliebtes Java-Persistenz-Framework, das eine einfache und effiziente Möglichkeit bietet, die Persistenz von Java-Objekten zu verwalten. Während des Entwicklungsprozesses treten jedoch häufig Hibernate-Fehler auf, die dazu führen können, dass das Programm abnormal beendet wird oder instabil wird. Der Umgang mit und die Vermeidung von Hibernate-Fehlern ist zu einer Fähigkeit geworden, die Java-Entwickler beherrschen müssen. In diesem Artikel werden einige gängige Hib vorgestellt

Hibernate ist ein hervorragendes ORM-Framework, das den Datenzugriff zwischen Java-Anwendungen und relationalen Datenbanken vereinfacht. In Hibernate können wir Eins-zu-Viele- und Viele-zu-Viele-Beziehungen verwenden, um komplexe Datenmodelle zu verarbeiten. Die Eins-zu-Viele-Beziehung von Hibernate In Hibernate bedeutet eine Eins-zu-Viele-Beziehung, dass eine Entitätsklasse mehreren anderen Entitätsklassen entspricht. Beispielsweise kann eine Bestellung mehreren Bestellpositionen (OrderItem) entsprechen, und ein Benutzer (User) kann mehreren Bestellungen (Order) entsprechen. Um eine Eins-zu-Viele-Beziehung in Hibernate zu implementieren, müssen Sie in der zu speichernden Entitätsklasse ein Sammlungsattribut definieren

Objekt zu Byte und Byte zu Objekt Heute erfahren wir, wie man von Objekt zu Byte und von Byte zu Objekt konvertiert. Definieren Sie zunächst eine Klasse student: packagecom.byteToObject;importjava.io.Serializable;publicclassstudentimplementsSerializable{privateintsid;privateStringname;publicintgetSid(){returnsid;}publicvoidsetSid(in

Die Unterschiede zwischen Hibernate und Mybatis: 1. Implementierungsmethode; 3. Vergleich der Objektverwaltung; Detaillierte Einführung: 1. Implementierungsmethode: Hibernate ist eine vollständige Objekt-/Relational-Mapping-Lösung, die Objekte Datenbanktabellen zuordnet, während MyBatis von Entwicklern das manuelle Schreiben von SQL-Anweisungen und ResultMap erfordert. 2. Leistung: Hibernate ist in Bezug auf die Entwicklungsgeschwindigkeit schneller MyBatis, weil Hibernate die DAO-Ebene usw. vereinfacht.

1. Einführung in die Object-Klasse Object ist eine von Java standardmäßig bereitgestellte Klasse. Mit Ausnahme der Object-Klasse verfügen alle Klassen in Java über Vererbungsbeziehungen. Standardmäßig erbt es die übergeordnete Klasse Object. Das heißt, Objekte aller Klassen können über die Referenz von Object empfangen werden. Beispiel: Verwenden Sie Object, um Objekte aller Klassen zu empfangen: classPerson{}classStudent{}publicclassTest{publicstaticvoidmain(String[]args){function(newPerson());function(newStudent());}public

Hibernate ist ein Open-Source-ORM-Framework, das die Datenzuordnung zwischen relationalen Datenbanken und Java-Programmen miteinander verbindet und so Entwicklern den Zugriff auf Daten in der Datenbank erleichtert. Die Verwendung des Hibernate-Frameworks kann den Aufwand beim Schreiben von SQL-Anweisungen erheblich reduzieren und die Entwicklungseffizienz und Wiederverwendbarkeit von Anwendungen verbessern. Lassen Sie uns das Hibernate-Framework unter folgenden Gesichtspunkten vorstellen. 1. Vorteile des Hibernate-Frameworks: objektrelationale Zuordnung, Ausblenden von Datenbankzugriffsdetails, Ermöglichen der Entwicklung

In diesem Artikel erfahren Sie, wie Sie Masseneinfügungen/-aktualisierungen im Ruhezustand durchführen. Wann immer wir eine SQL-Anweisung ausführen, führen wir dies durch einen Netzwerkaufruf an die Datenbank durch. Wenn wir nun 10 Einträge in die Datenbanktabelle einfügen müssen, müssen wir 10 Netzwerkaufrufe durchführen. Stattdessen können wir Netzwerkaufrufe mithilfe der Stapelverarbeitung optimieren. Durch die Stapelverarbeitung können wir eine Reihe von SQL-Anweisungen in einem einzigen Netzwerkaufruf ausführen. Um dies zu verstehen und umzusetzen, definieren wir unsere Entität: @EntitypublicclassParent{@Id@GeneratedValue(strategy=GenerationType.AUTO)
