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、当然,扎实基础是关键。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











SpringBoot 프로젝트 서문에 Hibernate 통합하기 Hibernate는 지속성 작업을 용이하게 하기 위해 Java 객체를 데이터베이스 테이블에 매핑할 수 있는 널리 사용되는 ORM(Object Relational Mapping) 프레임워크입니다. SpringBoot 프로젝트에서 Hibernate를 통합하면 데이터베이스 작업을 더 쉽게 수행하는 데 도움이 될 수 있습니다. 이 기사에서는 SpringBoot 프로젝트에 Hibernate를 통합하는 방법을 소개하고 해당 예제를 제공합니다. 1.종속성 소개pom.xml 파일에 다음 종속성을 소개합니다: org.springframework.bootspring-boot-starter-data-jpam

Java는 소프트웨어 개발 분야에서 널리 사용되는 객체 지향 프로그래밍 언어입니다. Hibernate는 Java 객체의 지속성을 관리하는 간단하고 효율적인 방법을 제공하는 인기 있는 Java 지속성 프레임워크입니다. 그러나 개발 과정에서 Hibernate 오류가 자주 발생하며, 이러한 오류로 인해 프로그램이 비정상적으로 종료되거나 불안정해질 수 있습니다. Hibernate 오류를 처리하고 방지하는 방법은 Java 개발자가 숙달해야 하는 기술이 되었습니다. 이 기사에서는 몇 가지 일반적인 Hib를 소개합니다.

Hibernate의 일대다 및 다대다 Hibernate는 Java 애플리케이션과 관계형 데이터베이스 간의 데이터 액세스를 단순화하는 탁월한 ORM 프레임워크입니다. Hibernate에서는 복잡한 데이터 모델을 처리하기 위해 일대다 및 다대다 관계를 사용할 수 있습니다. Hibernate의 일대다 Hibernate에서 일대다 관계는 하나의 엔터티 클래스가 여러 개의 다른 엔터티 클래스에 대응한다는 것을 의미합니다. 예를 들어, 하나의 주문은 여러 주문 항목(OrderItem)에 해당할 수 있고, 사용자(User)는 여러 주문(Order)에 해당할 수 있습니다. Hibernate에서 일대다 관계를 구현하려면, 저장할 엔터티 클래스에 컬렉션 속성을 정의해야 합니다.

Object에서 byte로, byte에서 Object로 오늘은 Object에서 byte로 변환하는 방법과 byte에서 Object로 변환하는 방법을 알아보겠습니다. 먼저 학생 클래스를 정의합니다. packagecom.byteToObject;importjava.io.Serialized;publicclassstudentimplementsSerialized{privateintsid;privateStringname;publicintgetSid(){returnsid;}publicvoidsetSid(in

최대 절전 모드와 mybatis의 차이점: 1. 구현 방법 2. 성능 3. 개체 관리 비교 4. 캐싱 메커니즘 자세한 소개: 1. 구현 방법인 Hibernate는 객체를 데이터베이스 테이블에 매핑하는 완전한 객체/관계형 매핑 솔루션인 반면, MyBatis는 개발자가 SQL 문과 ResultMap을 수동으로 작성해야 합니다. 2. 성능, Hibernate는 개발 속도 측면에서 가능합니다. MyBatis는 Hibernate가 DAO 레이어 등을 단순화하기 때문입니다.

1. Object 클래스 소개 Object는 Java에서 기본적으로 제공하는 클래스입니다. Object 클래스를 제외한 Java의 모든 클래스는 상속 관계를 갖습니다. 기본적으로 Object 상위 클래스를 상속합니다. 즉, Object의 참조를 이용하여 모든 클래스의 객체를 받을 수 있습니다. 예: Object를 사용하여 모든 클래스의 객체 수신 classPerson{}classStudent{}publicclassTest{publicstaticvoidmain(String[]args){function(newPerson());function(newStudent());}public

Hibernate는 관계형 데이터베이스와 Java 프로그램 간의 데이터 매핑을 서로 바인딩하여 개발자가 데이터베이스의 데이터에 더 쉽게 액세스할 수 있도록 하는 오픈 소스 ORM 프레임워크입니다. Hibernate 프레임워크를 사용하면 SQL 문 작성 작업이 크게 줄어들고 애플리케이션의 개발 효율성과 재사용성이 향상됩니다. 다음과 같은 측면에서 Hibernate 프레임워크를 소개해보자. 1. Hibernate 프레임워크의 장점: 객체-관계형 매핑, 데이터베이스 액세스 세부 사항 숨기기, 개발 수행

이 기사에서는 Hibernate에서 대량 삽입/업데이트를 수행하는 방법을 살펴보겠습니다. SQL 문을 실행할 때마다 데이터베이스에 대한 네트워크 호출을 통해 이를 수행합니다. 이제 데이터베이스 테이블에 10개의 항목을 삽입해야 한다면 10개의 네트워크 호출을 수행해야 합니다. 대신 일괄 처리를 사용하여 네트워크 호출을 최적화할 수 있습니다. 일괄 처리를 통해 단일 네트워크 호출에서 일련의 SQL 문을 실행할 수 있습니다. 이를 이해하고 구현하기 위해 엔터티를 정의해 보겠습니다. @EntitypublicclassParent{@Id@GeneratedValue(strategy=GenerationType.AUTO)
