2017-04-27 29 views
2

我有兩個連接類,休眠消除對多條記錄和傳播的許多關係

病人:

... 
@Entity 
@Table(schema="public",name="patient") 
public class Patient{ 
.. 
@Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "patient_id") 
    public Integer getId() { 
     return Id; 
    } 
    public void setId(Integer id) { 
     Id = id; 
    } 

@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
    @JoinTable(name = "patient_examination", catalog = "ALTAdb", joinColumns = { 
    @JoinColumn(name = "patient_id", nullable = false, updatable = false) }, 
    inverseJoinColumns = { @JoinColumn(name = "examination_id",nullable = false, updatable = false) }) 
    public Set<Examination> getExaminations() { 
     return examinations; 
    } 
    public void setExaminations(Set<Examination> examinations) { 
     this.examinations = examinations; 
    } 
... 

考試:

... 
@Entity 
@Table(schema="public",name="examination") 
public class Examination{ 
.. 
@Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "examination_id") 
    public Integer getId() { 
     return Id; 
    } 
    public void setId(Integer id) { 
     Id = id; 
    } 
    @ManyToMany(fetch = FetchType.EAGER, mappedBy = "examinations") 
    public Set<Patient> getPatients() { 
     return patients; 
    } 
    public void setPatients(Set<Patient> patients) { 
     this.patients = patients; 
    } 
... 

,當我嘗試刪除一條記錄的是存在於患者體內

代碼:

public boolean deleteExamination(int ExaminationId){ 
    boolean deleted=false; 
    Session session=factory.getCurrentSession(); 
    session.beginTransaction(); 
    Query query =session.createQuery("select m from "+ Examination.class.getName() +" m"); 
    List<Examination> examinations= query.getResultList(); 
    for(Examination e: examinations){ 
     if(e.getId()==ExaminationId){ 
      session.delete(e); 
      deleted=true; 
      break; 
     } 
    } 
    session.getTransaction().commit(); 
    return deleted; 
} 

這是我的控制檯:

"Examination" violates the external key constraint "fkexas9b9fwxn0t37wl60a4jcd3" on the table "patient_examination" 
    Detail: The key (examination_id) = (4) is still referenced by the table "patient_examination" 

我不知道如何解決它。

我也試圖進行查詢可以直接訪問patient_examination,但我不知道工作方法爲它

+0

試圖清除病人之前刪除 –

回答

0

嘗試@ManyToMany與CascadeType.REMOVE它將作爲工作至今,我知道...

+0

沒有區別,.ALL也有.REMOVE的意思。 – Francesco