4

외래 키 중 하나를 통해 조인 테이블에서 행 삭제를 계단식으로 처리하려고하는데이 ID와 연관된 모든 행을 제거하려는 관련 테이블이 있습니다. 아래 그림과 같습니다. hibernate와 함께 Session.delete (reqCandObject)를 사용할 때, 잘 동작하고 candidate_jobReq 테이블에서 하나의 엔트리를 삭제하고 연계 된 코멘트를 삭제한다. 그러나 을 삭제하고 싶습니다. 특정 후보 ID가있는 candidate_jobReq 항목 모두을 삭제하고 싶습니다. (또한 주석을 삭제합니다.) 아래의 기능을 시도했지만 멋진 hibernate.delete (object) 함수와 달리이 키는 외래 키로 실행됩니다 제약 조건 오류. 최대 절전 모드에서 삭제를 계단식으로 수행하는 동안이 행을 어떻게 삭제할 수 있습니까? "Delete where"Hibernate에서 계단식 삭제?

enter image description here

public void deleteWhere(String selectionCase){ 
    Session hibernateSession = this.getSession(); 
    try { 
     hibernateSession.beginTransaction(); 
     Query q = hibernateSession.createQuery("delete "+ type.getSimpleName() +" where " + selectionCase); 
     q.executeUpdate(); 
     hibernateSession.getTransaction().commit(); 
    } finally { 
     hibernateSession.close(); 
    } 
} 

답변

4

절전 내부적 캐스케이드를 처리한다. delete 쿼리를 실행해도 내부 캐스케이드가 트리거되지 않으므로 불일치/고아가 발생합니다. 이것은 외래 키 제약 조건 오류를 시도하고 직면했을 수 있습니다.

  1. selectionCase를 사용하여 개체의 목록을 선택

    는 자신의 아이 엔티티와 함께 ​​개체의 목록을 삭제하는 방법은 두 가지가 있습니다. 목록을 반복하고 각각을 session.delete을 사용하여 개별적으로 삭제하십시오.

  2. 레코드를 수동으로 삭제하십시오. 별도의 delete 문을 작성하십시오. 외래 키 제약 조건 위반을 방지하려면 부모를 삭제하기 전에 하위 레코드를 삭제해야합니다. 이것은 첫 번째 옵션보다 성능이 좋습니다.
+0

나는이 사건을 신속히 처리 할 수있는 좋은 방법이 있었으면 좋겠다. -/오. 정보 주셔서 감사합니다! –

+0

@AdamJames 환영합니다. –

+0

정말이 동작을 개선해야합니다! – Mitchapp