0

次の問題が発生しました。エンティティを削除しようとすると、自動的に外部キー オブジェクトを削除しようとします。

これは私のエンティティです:

@Entity
public class ScmoKomponente implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Size(min = 1, max = 50, message = "{standard}")
    private String name;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date datum;
    @ManyToOne(cascade = CascadeType.ALL)
    private ScmoProjekt projekt;
    @ManyToOne(cascade = CascadeType.ALL)
    private SupplierUser lieferant;

    public SupplierUser getLieferant() {
        return lieferant;
    }

    public void setLieferant(SupplierUser lieferant) {
        this.lieferant = lieferant;
    }

    public ScmoProjekt getProjekt() {
        return projekt;
    }

    public void setProjekt(ScmoProjekt projekt) {
        this.projekt = projekt;
    }

    public Date getDatum() {
        return datum;
    }

    public void setDatum(Date datum) {
        this.datum = datum;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof ScmoKomponente)) {
            return false;
        }
        ScmoKomponente other = (ScmoKomponente) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "scmo.model.project.ScmoKomponente[ id=" + id + " ]";
    }

}

削除機能:

public void deleteScmoKomponente(ScmoKomponente ScmoKomponente) {
    em.remove(em.merge(ScmoKomponente));
}

そして呼び出し:

public String deleteScmoKompo() {
    ss.deleteScmoKomponente(selectedKompo);
    selectedKompo = null;
    return scmoEditKompo();
}

scmoKomponent を削除しようとすると、データベース内の ScmoProjekt および SupplierUser オブジェクトが自動的に削除されます。

4

1 に答える 1

0

CascadeType.ALL親エンティティを変更すると、hibernateまたはjpaを設定すると、更新、保存、削除などの子要素ですべての操作が行われることが正しくわかっていれば 。したがって、プログラムを修正したい場合は、@Many-to-One注釈からカスケード属性を削除するだけです。

カスケード型に関する情報は、ここで見つけることができます

于 2013-02-14T09:18:26.047 に答える