-1

休止状態に問題があります。私のドメインは、Voucher、Offer、ExtraUser、Term、および TermUserRegistration です。それらは次のようになります。

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

IDやその他の属性付き...バウチャーはクーポンです。すべての OfferDB (それはオファーです.. たとえば、ボートでの旅行など..) には複数のバウチャーがあります。すべての Extrauser は、複数のバウチャーを所有することもできます。

提供期間 (具体的な日付) - TermUserRegistration - にはいくつかの予約もあり、1 つの登録ごとに 1 つのバウチャーを意味します。

次にオファー:

@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: サーブレット [edit] の Servlet.service() がパス [/project] のコンテキストで例外をスローしました [実行に失敗しました:削除されたインスタンスが update() に渡されました: [null entity name#null]] 根本原因 org.hibernate.ObjectDeletedException : 削除されたインスタンスが update() に渡されました: [null entity name#null]

4

1 に答える 1

0

I am sorry for asking such a stupid question. I did not know too much about (cascade = CascadeType.ALL). There was a problem.

于 2013-06-26T10:27:03.073 に答える