私は Hibernate で作業することを学ぼうとしていますが、おそらく私は@ManyToOne
逆の関係を理解していません。と の 2 つのエンティティがAuthor
ありDepartment
ます。1 人の著者には 1 つの部門があり、1 つの部門には複数の著者がいます。
Author を削除しても、Department には何も起こらないはずです。Department を削除すると、Author のテーブルの FK がNULL
値に更新されます (Author は削除されません)。
私は反転の素晴らしい説明を見つけ、それAuthor
が所有側であることがわかりました。このスレッドによると、子 (部門) を削除すると、FK を に設定する必要がありますNULL
。しかし、Department だけが削除され、FK が Author テーブルに残っているため (これが につながります)、それは起こりませんorg.hibernate.ObjectNotFoundException: No row with the given identifier exists
。
エンティティの注釈に追加CascadeType.REMOVE
すると、部門に関連付けられているすべての作成者も削除されます。前述の状態はどちらも望ましくありません。Department を削除し、Author テーブルの FK を に設定したいだけです。どうやってするか?@OneToMany
Department
NULL
Author
およびDepartment
注釈付きのエンティティ:
@Entity
@Table(name = "author")
public class Author implements Serializable {
@Id
@Column(name = "idauthor")
@GeneratedValue
private Integer idAuthor;
@DepartmentFormat
@ManyToOne
@JoinColumn(name = "department", nullable = true)
private Department department;
}
@Entity
@Table(name="department")
public class Department implements Serializable {
@Id
@Column(name="iddepartment")
@GeneratedValue
private Integer iddepartment;
@OneToMany(mappedBy = "department", cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
private Set<Author> authors;
}
前もって感謝します