2013-02-14 179 views
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和供应商用户在数据库中的对象。

回答

0

如果我正确地知道,如果你设置CascadeType.ALL hibernate或jpa会做更改你的父实体时更新,保存,删除等子元素的所有操作。 所以,如果你想修复你的程序,只需从@Many-to-One注释中删除cascade attr。

您可以找到有关级联类型here

+0

简单但有效实现了一些信息,非常感谢你! – Joscha 2013-02-14 12:08:46