假设Person
实体的List<Address> listOfAddresses
字段与@ManyToMany
实体有@OneToMany
或Address
关系。如果我使用Address
删除em.remove("James's_address")
,listOfAddresses
是否会自动更新以删除"James's_address"
?
答案 0 :(得分:3)
取决于。
如果您有OneToMany,并且地址表中有人的外键,则删除该地址将起作用。如果在删除地址之前已在会话中加载了人及其地址,则其地址列表仍将包含已删除的地址。你必须自己维护所有的关联。如果该人的地址尚未加载,则加载时,列表将不包含已删除的地址,显然,因为Hibernate将无法在数据库中找到它。
如果OneToMany使用连接表,或者它是ManyToMany,那么删除地址而不将其从引用它的所有人的地址列表中删除将导致异常,因为连接表将继续引用要删除的地址。外键约束是导致异常的原因。