bugfix> java > 投稿

プロジェクトから1つのオブジェクトを削除しようとしています。 それは他の多くのクラスに依存しています。そのオブジェクトを他のすべての依存関係から解放する必要があることを理解しています。すべての依存関係を削除しようとしましたが、それでも外部キー制約エラーが発生します

これが私のクラスです

class LabAssistant{
    // variables
    @OneToMany(cascadeType.All,
               orphanRemoval=true,
               mappedBy="labAssistant")
    private List<LabRecord> labRecords;
    
    //Getters and setters
}
class LabRecord {
    //variables
    @OneToMany(cascade = CascadeType.ALL, mappedBy="labRecord")
    private List<Test> tests;
    @ManyToOne
    @JoinColumn(name = "lab_id")
    private LabAssistant labAssistant;
    //Getters and Setters
}
class Test{
    @Lob
    private byte[] testReport;
    @ManyToOne
    @JoinColumn(name = "lab_record_id")
    private LabRecord labRecord;
    @ManyToOne
    @JoinColumn(name = "test_info_id")
    private TestInfo testInfo;
    //Getters and setters
}
boolean deleteAssistant(int id){
  LabAssistant labAssistant = session.load(LabAssistant.class, id);
  for(LabRecord l : labAssistant.getLabRecords()){
    for(Test t: l.getTests()){
      t.setTestInfo(null);
    }
    l.getTests().clear();
  }
}
labAssistant.getLabRecords().clear();
session.delete(labAssistant);
return true;
}

まだ外部キー制約エラーが発生します

'db'.'tests', Constraint 'fkey' Foreign Key ('lab_record_id') References 'lab_records'('id')

助けていただければ幸いです!!

回答 2 件
  • LabAssistantとLabRecordの関係をCascadeType.ALLおよびorphanRemoval = trueとして確立すると、LabAssistantに割り当てられているLabRecordも削除されます。おそらく、これらのLabRecordのいずれかに関連するテストエントリがあります。以下をお読みください。

    https://www.objectdb.com/java/jpa/persistence/delete

  • どういうわけかデータベースを再作成することで問題は解決しました。

あなたの答え