【发布时间】:2011-04-14 03:53:03
【问题描述】:
@Entity
public class Person {
@ElementCollection
@CollectionTable(name = "PERSON_LOCATIONS", joinColumns = @JoinColumn(name = "PERSON_ID"))
private List<Location> locations;
[...]
}
@Embeddable
public class Location {
[...]
}
鉴于以下类结构,当我尝试将新位置添加到人员位置列表时,它总是会导致以下 SQL 查询:
DELETE FROM PERSON_LOCATIONS WHERE PERSON_ID = :idOfPerson
和
A lotsa' inserts into the PERSON_LOCATIONS table
Hibernate (3.5.x / JPA 2) 删除给定 Person 的所有关联记录并重新插入所有以前的记录以及新记录。
我认为 Location 上的 equals/hashcode 方法可以解决问题,但它并没有改变任何东西。
感谢任何提示!
【问题讨论】:
-
我遇到了相反的问题 - 当我更新父级时,Hibernate 没有删除任何内容。这是我在网上找到的唯一相关帖子,包括 JBoss 的 Hibernate 文档。结果是由于现在未知的原因,我将父级上的集合变量声明为
final,而 Hibernate 默默地什么也没做。我拿出了final,它开始很好地更新和删除。 -
我发现
fetch = FetchType.EAGER在简单的列表操作中也会发生这种情况(不是更新或删除)l。 @OrderColumn 似乎没有效果
标签: java hibernate orm jpa jpa-2.0