【问题标题】:Will removing an entity automatically update their relationships?删除实体会自动更新它们的关系吗?
【发布时间】:2012-01-31 02:08:12
【问题描述】:
假设Person 实体有一个List<Address> listOfAddresses 字段,该字段与Address 实体有@ManyToMany 或@OneToMany 关系。如果我用em.remove("James's_address") 删除Address,listOfAddresses 会自动更新以删除"James's_address"吗?
【问题讨论】:
标签:
java
jpa
entity
jpa-2.0
relationship
【解决方案1】:
视情况而定。
如果您有一个 OneToMany,并且地址表具有该人的外键,则删除该地址将起作用。如果在删除地址之前已将人员及其地址加载到会话中,则其地址列表仍将包含已删除的地址。您必须自己维护所有关联。如果这个人的地址还没有被加载,当他们被加载时,列表显然不会包含被删除的地址,因为 Hibernate 不会在数据库中找到它。
如果 OneToMany 使用连接表,或者如果它是 ManyToMany,则删除地址而不将其从引用它的所有人员的地址列表中删除将导致异常,因为连接表将继续引用您要删除的地址。外键约束是导致异常的原因。