级联删除不起作用

时间:2013-06-25 14:35:01

标签: java hibernate annotations cascade

我遇到了Hibernate的问题。我的域名是凭证,优惠,ExtraUser,Term和TermUserRegistration。他们看起来像:

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

带有ID和其他属性......凭证是一些优惠券。每个OfferDB(它是提供......例如一些乘船或其他东西......)都有不止一张优惠券。每个额外用户也可以拥有多个优惠券。

对优惠期限(具体日期) - TermUserRegistration - 也有一些保留 - 每个注册都意味着一张优惠券。

然后提供:

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

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

ID和其他属性包括......

然后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并删除它的连接关系,如Voucher ...我有一些级联删除异常的问题。

我的方法看起来

@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 [edit]的Servlet.service()在路径[/ project]的上下文中引发异常[执行失败:已删除的实例传递给update():[null entity name #null]]具有根本原因 org.hibernate.ObjectDeletedException:已传递给update()的已删除实例:[null entity name #null]

1 个答案:

答案 0 :(得分:0)

我很抱歉提出这么愚蠢的问题。我不太了解(cascade = CascadeType.ALL)。有一个问题。