1
假設Person
實體具有List<Address> listOfAddresses
字段,該字段是@ManyToMany
或@OneToMany
與Address
實體的關係。如果我刪除和em.remove("James's_address")
,listOfAddresses
會自動更新以刪除"James's_address"
?移除一個實體會自動更新他們的關係嗎?
假設Person
實體具有List<Address> listOfAddresses
字段,該字段是@ManyToMany
或@OneToMany
與Address
實體的關係。如果我刪除和em.remove("James's_address")
,listOfAddresses
會自動更新以刪除"James's_address"
?移除一個實體會自動更新他們的關係嗎?
這取決於。
如果您有一個OneToMany,並且地址表具有該人的外鍵,則刪除該地址將會起作用。如果該人及其地址在刪除地址之前已經加載到會話中,則其地址列表仍將包含已刪除的地址。你必須自己維護所有的關聯。如果這個人的地址還沒有被加載,當它們被加載時,這個列表顯然不包含被刪除的地址,因爲Hibernate在數據庫中找不到它。
如果OneToMany使用一個連接表,或者它是一個ManyToMany,那麼刪除該地址而不從所有引用它的人的地址列表中刪除該地址將導致一個異常,因爲連接表將繼續引用一個你想要刪除的地址。外鍵約束是什麼會導致異常。