PeelTestFile、DiscreteJob、PeelTestFileJob の 3 つのクラスがあります。これは、ユーザー、グループ、およびユーザー グループの古典的な問題と同様の設定です。PeelTestFileJob を削除しようとしています。そうすると、外部キーがnullに設定されます。外部キーを NOT NULL に設定しているため、これは問題です。これは適切です。データベース内の 1 つのレコードだけを削除したいのですが、Java では、インスタンスが属する 2 つのセットからインスタンスを削除したいのです (これは、null を設定しているように見える場所です)。
以下は私のコードです。これを行う適切な方法は何ですか?
public class DiscreteJob
{
private Set<PeelTestFileJob> peelTestJobs;
/**
* @hibernate.set
* inverse="true"
* lazy="true"
* cascade="all-delete-orphan"
* @hibernate.collection-key
* column="WIP_ENTITY_ID"
* @hibernate.collection-one-to-many
* class="com.icumed.ifactory3.dto.PeelTestFileJob"
*/
public Set<PeelTestFileJob> getPeelTestJobs()
{
return this.peelTestJobs;
}
public boolean remove(
PeelTestFileJob peelTestFileJob)
{
return this.peelTestJobs.remove(peelTestFileJob);
}
public void setPeelTestJobs(
Set<PeelTestFileJob> peelTestJobs)
{
this.peelTestJobs = peelTestJobs;
}
}
public class PeelTestFile
{
private Set<PeelTestFileJob> peelTestFileJobs;
/**
* @hibernate.set
* inverse="true"
* lazy="true"
* cascade="all-delete-orphan"
* @hibernate.collection-key
* column="PEEL_TEST_FILE_ID"
* @hibernate.collection-one-to-many
* class="com.icumed.ifactory3.dto.PeelTestFileJob"
*/
public Set<PeelTestFileJob> getPeelTestFileJobs()
{
return this.peelTestFileJobs;
}
public boolean remove(
PeelTestFileJob peelTestFileJob)
{
return this.peelTestFileJobs.remove(peelTestFileJob);
}
public void setPeelTestFileJobs(
Set<PeelTestFileJob> jobs)
{
this.peelTestFileJobs = jobs;
}
}
public class PeelTestFileJob
{
private PeelTestFile peelTestFile;
private DiscreteJob job;
private User createdBy;
private Date creationDate;
/**
* @hibernate.many-to-one
* column="PEEL_TEST_FILE_ID"
* not-null="true"
* outer-join="false"
*/
public PeelTestFile getPeelTestFile()
{
return this.peelTestFile;
}
public void setPeelTestFile(
PeelTestFile file)
{
this.peelTestFile = file;
}
/**
* @hibernate.many-to-one
* column="WIP_ENTITY_ID"
* not-null="true"
* outer-join="false"
*/
public DiscreteJob getJob()
{
return this.job;
}
public void setJob(
DiscreteJob job)
{
this.job = job;
}
}
以下は、問題を引き起こしている私のコードです。
super.getHibernateTemplate().delete(peelTestFileJob);
if (job.remove(peelTestFileJob)) // setting foreign key to null?
{
if (peelTestFile.remove(peelTestFileJob)) // setting foreign key to null?
{
if (peelTestFile.getPeelTestFileJobs().isEmpty())
{
// modify the peel test file here
getPeelTestFileDAO().update(peelTestFile, bioIdentification);
}
}
}