2012-06-05 5 views
1

db에서 엔티티를 삭제할 수 없습니다. 나는 그들 중 두 클래스 중 하나가 영수증이며 다른 하나는 게재됩니다. 영수증은JPA로 엔티티 삭제

@ElementCollection 
@OneToMany(cascade={CascadeType.ALL}, orphanRemoval=true) 
public List<Serving> servings; 

입니다. 그리고 나는 서빙을 컨트롤러에서 삭제할 것입니다.

Serving serving = Serving.findById(servID); 
serving.delete(); 

결과는 다음과 같습니다. PersistenceException가 발생

실행 예외 : org.hibernate.exception.ConstraintViolationException는 : 스택 추적의 나머지 부분을 읽어 JDBC 배치 업데이트

+1

FK의 contraint (당신이 인분에이 속한 영수증에 대해 알고 안시겠습니까?를 orphanRemoval은 정말 하나 하나의 영수증에 속하는 서빙 것을 나타내는 것)? – esej

+0

물론 fk ... –

+0

죄송합니다. 그렇다면 질문을 구체적으로 적어주십시오. (Reciept가 서빙에 매핑되어 있고 어떻게 그렇게 매핑되어 있다면 흥미 롭다고 생각합니다.) – esej

답변

4

뭔가 : 영수증 이후

Receipt receipt = serving.getReceipt(); 
receipet.setServings(receipt.getServings().remove(serving)); 

는 봉사가 삭제 될 때 알고 있어야 객체 지향 관점 영수증로부터 인분의 OO 소유자이다.

서빙 또는 서빙 아이디 중 하나에 대해 영수증에 파인더를 쓸 수 있습니다.

는 - dB에서

+0

인원 영수증을받는 방법은 무엇입니까? 나는 봉사에서 영수증에 관해서 아무것도 보관하지 않습니다. –

+0

(매핑 재 설계가 옵션이 아닌 경우 findByServingId()와 같은 Reciept에 대한 찾기 쿼리를 통해) 서빙 시작 부분에서 ID를 어떻게 얻었습니까? 왜 DB에 FK 제한이 있습니까? – esej

+0

JPA가 FK 제약 조건을 자동으로 수행했습니다. 하지만 영수증을받을 수있는 방법을 찾았는데 이제는 서빙을 삭제할 수 있습니다. 당신의 도움을 주셔서 감사합니다. :) –

2

을 실행할 수 없습니다, 당신은 위반 된 제약의 이름을 찾아야한다. 삭제하려고하는 게재를 참조하는 다른 엔티티가있을 수 있습니다 (삭제하려는 게재 행에 외래 키가있는 다른 행).

따라서이 엔티티를 삭제하려면 외래 키를 통해 참조하는 모든 엔티티가 더 이상이 엔티티를 참조하지 않아야합니다. 이를 수행하는 방법은 이러한 엔티티와 서빙과의 관계 및 원하는 작업에 따라 달라집니다. 연관을 제거하거나 참조하는 엔티티도 삭제하면됩니다. 같은

+0

관계 테이블에서 froeign 키라는 것을 알고 있지만 대답이 아닙니다 ... 어떻게이 엔티티를 삭제할 수 있습니까? ? :) –

+0

답변을 편집하십시오. –