関連する 2 つのクラスに JPA アノテーションが付けられています。アラームとステータス。1 つのアラームは 1 つのステータスを持つことができます。
必要なのは、1 つのステータスを削除し、削除されたそのステータスにあるアラームに null 値を「伝播」できるようにすることです。
つまり、外部キーを「on delete set null」として定義する必要があります。
@Entity
public class Alarm {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sequence")
@SequenceGenerator(name="sequence", sequenceName="alarm_pk_seq")
private Integer id;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="idStatus")
private Status status;
// get/set
}
@Entity
public class Status {
@Id
@Column(name="idStatus")
private Integer id;
private String description;
// get/set
}
例:
前:
STATUS
id description
1 new
2 assigned
3 closed
ALARMS
id status
1 1
2 2
3 2
After (id=2のステータスを削除)
STATUS
id description
1 new
3 closed
ALARMS
id status
1 1
2 NULL
3 NULL
Hibernate と PostgreSQL を使用して、ソース コードからデータベースを自動的に生成しています。可能なすべての CascadeType を試しましたが、成功しませんでした。
コードに何か問題がありますか? JPAでそれを行うことは可能ですか?