【发布时间】:2011-04-30 16:00:04
【问题描述】:
从如上所述映射的列表中删除元素时遇到问题。这是映射:
@实体 @表(名称=“富”) 类Foo { 私人列表酒吧; @OneToMany @OrderColumn( 名称 = "order_index" ) @JoinTable(name = "foo_bar_map", joinColumns = @JoinColumn(name = "foo_id"), inverseJoinColumns = @JoinColumn(name = "bar_id")) @Fetch(FetchMode.SUBSELECT) 公共列表 getBars() { 返回栏; } }插入 Bar 实例并保存 Foo 工作正常,但是当我从列表中删除一个元素并再次保存时,违反了映射表中 bar_id 的唯一约束。以下 SQL 语句由 hibernate 发出,它们看起来很奇怪:
日志:执行:从 foo_bar_map 中删除,其中 foo_id=$1 和 order_index=$2 详细信息:参数:$1 = '4',$2 = '6' 日志:执行 S_5:更新 foo_bar_map 设置 bar_id=$1 其中 foo_id=$2 和 order_index=$3 详细信息:参数:$1 = '88',$2 = '4',$3 = '0' 错误:重复键值违反唯一约束“foo_bar_map_bar_id_key”鉴于 Hibernate 生成的语句(列表中有五个项目,我删除第一个项目,Hibernate 删除带有 LAST 索引的映射行并尝试更新其余的,从第一个)。
上面的映射有什么问题?
【问题讨论】:
标签: java hibernate jpa jpa-2.0 one-to-many