2013-06-25 4 views
-1

최대 절전 모드에 문제가 있습니다. 내 도메인은 바우처, 쿠폰, ExtraUser, Term 및 TermUserRegistration입니다. 그들은 다음과 같습니다 :계단식 삭제가 작동하지 않습니다.

@Entity(name = "Voucher") 
@Table(name = "extra_vouchers") 
public class Voucher implements Cloneable, Serializable{ 

ID 및 기타 속성 ... 쿠폰은 쿠폰입니다. 모든 OfferDB (예 : 보트 등으로 일부 여행 ..)에는 하나 이상의 쿠폰이 있습니다. 모든 엑스트라 사용자는 하나 이상의 바우처도 소유 할 수 있습니다.

Term of offer (구체적인 날짜) - TermUserRegistration - 모든 등록은 하나의 바우처를 의미합니다. ...

다음 ExtraUser

@Entity 
@Table(name = "extra_offers") 
public class OfferDB implements Cloneable, Serializable { 

@OneToMany (mappedBy="offer") 
private List<Voucher> vouchers = new ArrayList<Voucher>(); 

이드 및 기타 속성 포함 :

@Entity(name = "extrauser") 
@Table(name = "extra_users") 
public class ExtraUser implements Cloneable, Serializable { 

@OneToMany (fetch = FetchType.LAZY, mappedBy="owner") 
private List<Voucher> vouchers = new ArrayList<Voucher>(); 

다음 기간 :

@Entity(name = "Term") 
@Table(name = "extra_term") 
public class Term implements Cloneable, Serializable{ 

@OneToMany(cascade = CascadeType.ALL) 
@JoinTable(name = "extra_term_user", joinColumns = { @JoinColumn(name = "term_id") }, inverseJoinColumns = { @JoinColumn(name = "term_user_id") }) 
private List<TermUserRegistration> users = new ArrayList<TermUserRegistration>(); 

및 TermUserRegistration :

는 제공

@Entity(name = "TermUserRegistration") 
@Table(name = "extra_term_users") 
public class TermUserRegistration implements Cloneable, Serializable{ 

@OneToOne(cascade = CascadeType.ALL) 
private Voucher extraVoucher; 

지금 내가 ID로 TermUserRegistration을 삭제하고 또한 바우처 등의 연결 관계를 삭제할 수있는 몇 가지 방법이 있는지를 물어보고 싶은 ... 좀 폭포에 문제가 예외를 삭제할 수 있습니다.

내 방법은

@Override 
public void unregisterUserFromTerm(Term termToExport, TermUserRegistration termUser) { 
    Voucher voucherToDisable = voucherDao.findById(termUser.getExtraVoucher().getId()); 
    FreeVoucher freeVoucherToEdit = freeVoucherDao.findVoucherByCodeAndOfferId(termUser.getExtraVoucher().getCode(), termToExport.getOffer().getId()); 

    Long l = Long.parseLong(String.valueOf(termToExport.getOffer().getId())); 
    Offer offer = offerDao.findById(l);  

    ExtraUser extraUser = userDao.findById(termUser.getExtraUser().getId()); 

    termToExport.getUsers().remove(termUser); 
    extraTermDao.update(termToExport); 
    extraTermUserDao.delete(termUser); 

    offer.getVouchers().remove(voucherToDisable); 
    offerDao.update(offer); 

    extraUser.getVouchers().remove(voucherToDisable); 
    userDao.update(extraUser); 

    voucherDao.update(voucherToDisable); 
    voucherDao.delete(voucherToDisable); 

    freeVoucherToEdit.setFree(true); 
    freeVoucherDao.update(freeVoucherToEdit); 
} 

보이지만 내가

을 얻고있다 SEVERE : 경로 맥락에서 서블릿 [편집] 대한의 Servlet.service은() [/ 프로젝트] 예외를 던졌다 [실행 실패 :() : null 엔티티 이름 # null]]을 근본 원인으로 처리합니다. org.hibernate.ObjectDeletedException : 삭제 된 인스턴스가 update()에 전달되었습니다. [null 엔티티 이름 # null]

+0

TermUserRegistration이 삭제 될 때 하나의 연결된 바우처를 삭제할 수있는 방법이 있는지 묻고 있습니까? 바우처는 다른 어떤 것에도 연결되지 않으며 TermUserRegistration은 다른 어떤 것에도 연결되지 않으므로 ExtraUser 객체, Term 객체 또는 Offer 객체에 어떻게 접근 할 지 확신하지 못합니다. – Pace

+0

이러한 연쇄 삭제 예외는 무엇입니까? –

+0

엑스트라 사용자가 TermUser (termUser 등록 기관)에 연결되어 있습니다. \t @OneToOne (cascade = \t CascadeType.ALL) \t 개인 ExtraUser 엑스트라; .. 전화 번호, 주소 등등에 관한 정보가 있습니다. 용어는 아마도이 문제에서 중복 될 수 있지만 ... 상품권에는 상품권이 포함되어 있습니다. 맞습니까? –

답변

0

그런 어리석은 질문을하는 것을 시도하십시오. 나는 너무 많은 것을 알지 못했다 (cascade = CascadeType.ALL). 문제가 발생했습니다.

관련 문제