これは私にとってとても単純なシナリオのようですが、私はオンラインでも印刷でもソリューションを見つけることができません。私はいくつかのオブジェクトを持っています。(トリムダウン)Spring/HibernateのFK制約を持つオブジェクトを削除する
@Entity
public class Group extends BaseObject implements Identifiable<Long> {
private Long id;
private String name;
private Set<HiringManager> managers = new HashSet<HiringManager>();
private List<JobOpening> jobs;
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(
name="group_hiringManager",
[email protected](name="group_id"),
[email protected](name="hiringManager_id")
)
public Set<HiringManager> getManagers() {
return managers;
}
@OneToMany(mappedBy="group", fetch=FetchType.EAGER)
public List<JobOpening> getJobs() {
return jobs;
}
}
@Entity
public class JobOpening extends BaseObject implements Identifiable<Long> {
private Long id;
private String name;
private Group group;
@ManyToOne
@JoinColumn(name="group_id", updatable=false, nullable=true)
public Group getGroup() {
return group;
}
}
@Entity
public class HiringManager extends User {
@ManyToMany(mappedBy="managers", fetch=FetchType.EAGER)
public Set<Group> getGroups() {
return groups;
}
}
私はグループオブジェクトを削除します。これで、JobOpeningテーブルとgroup_hiringManagerテーブルに依存関係があり、削除機能が失敗します。私はマネージャーが他のグループを持っているので、削除をカスケードしたいとは思わないし、ジョブのオープンはグループレスにすることができます。依存関係を削除するために私のGroupManagerのremove()関数をオーバーライドしようとしましたが、何を保持していても削除が失敗したようです。
このオブジェクトを削除する正しい方法は何ですか?
+1:また、採用マネージャーも同様です。 –
お返事ありがとうございます。私の唯一の疑問は、このコードをSpringにどのように取り込むかです。私はそれが複数のモデルに触れるので、サービスレイヤーに入るはずだと思いますが、マネージャーオブジェクト内からentityManager.flush()を実行する方法を理解できません。それがなければ、ジョブのグループをnullにしてjobOpeningDaoで保存しても削除されません – maxdj
あなたのDAOのコードを表示すると、私はより良い解決策を提案できます。 –