我有三个类:PeelTestFile、DiscreteJob 和 PeelTestFileJob。这与 User、Group 和 UserGroup 经典问题的设置类似。我正在尝试删除 PeelTestFileJob。当我这样做时,它将外键设置为空。这是一个问题,因为我将外键设置为 NOT NULL,这是正确的。我希望它只删除数据库中的一条记录,然后在 Java 中我希望它从它所属的两组中删除实例(这似乎是设置空值的地方)。
下面是我的代码。这样做的正确方法是什么?
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);
}
}
}