您的映射是完全有效的,并且可以作为JPA 2.0实现与Eclipselink一起使用(
Fetch当然没有注释),但是对于Hibernate而言确实失败。
这是带有hibernate的DDL:
create table foo_bar_map (foo_id bigint not null, bar_id bigint not null, order_index integer not null, primary key (foo_id, order_index), unique (bar_id))alter table foo_bar_map add constraint FK14F1CB7FA042E82 foreign key (bar_id) references Bar4022509alter table foo_bar_map add constraint FK14F1CB7B6DBCCDC foreign key (foo_id) references Foo4022509
所以我们可以说
Foo#1保持了与列表
Bar#1,
Bar#2,
Bar#3,连接表包括:
foo_id | bar_id | order_index 1 | 1 |1 1 | 2 |2 1 | 3 |3
删除时,说出列表中的第一项,Hibernate首先
delete进入连接表的最后一行(WTF?):
foo_id | bar_id | order_index 1 | 1 |1 1 | 2 |2
然后尝试连接表中
update的
bar_id列而不是
order_index(WTF !?),以反映列表中项目的“新”顺序。首先(示意):
foo_id | bar_id | order_index 1 | 2 |1 1 | 2 |2
下一步将导致:
foo_id | bar_id | order_index 1 | 2 |1 1 | 3 |2
显然,由于的限制,这种方法听起来不正确, 也不起作用
。更笼统地说,为什么Hibernate搞砸了而不是更新该列呢?
unique``bar_id``bar_id``order_index
我认为这是一个Hibernate错误(报告为HHH-5694
,现在参见HHH-1268)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)