2013-06-25 84 views
-1

我有Hibernate的問題。我的域名是優惠券,優惠,ExtraUser,期限和TermUserRegistration。他們看起來像:級聯刪除不起作用

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

與ID和其他屬性...憑證是一些優惠券。每個OfferDB(它是提供...例如乘船旅行或其他..)有多個代金券。每個Extrauser可以擁有多張代金券。

也有一些保留期限(具體日期) - TermUserRegistration - 每一個註冊意味着一個優惠券。

再優惠:

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

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

標識和其他屬性包括...

然後ExtraUser:

@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); 
} 

但我正在逐漸

重度:Servlet.service()進行的servlet [編輯]在上下文中與路徑[/項目]拋出異常[執行失敗:刪除的實例傳遞給update():[null實體名稱#null]]與根本原因 org.hibernate.ObjectDeletedException:刪除實例傳遞給update():[null實體名稱#null]

+0

您是否在刪除TermUserRegistration時是否有辦法刪除連接的憑證?憑證沒有連接到其他任何東西,而TermUserRegistration也沒有連接到其他任何東西,所以我不確定如何獲得ExtraUser對象,Term對象或Offer對象。 – Pace

+0

這些級聯刪除異常是什麼? –

+0

ExtraUser連接到TermUser(aka termUserRegistration)\t @OneToOne(cascade = \t CascadeType.ALL) \t private ExtraUser extraUser;有關於電話號碼,地址等的信息。在此問題中,術語可能是多餘的......但優惠券也包含在優惠中,對不對? –

回答

0

我很爲了問這樣一個愚蠢的問題。我不太瞭解(cascade = CascadeType.ALL)。有一個問題。